c++ - set_difference 问题,不返回所有值或重复项
问题描述
我正在尝试使用数组并将第一个(bag1)和第二个(bag2)数组中没有出现的整数输出到新的第三个(newbag)数组中。该函数没有给我正确的区别。如果一个袋子有更多特定数量,它还需要包含任何重复项。
我的输出缺少列表中的重复项:
Bag 1: 1 3 3 4 5 5 7 7 8 9 9 11 12 12 12 16
Bag 2: -100 -4 1 3 3 4 5 6 7 8 8 9 11 12 12 12 15 19
Difference Bag: -100 -4 6 8 15 19
我试过改变袋子的顺序,但它们正确的数字永远不会输出。
const ArrayBag ArrayBag ::operator - (const ArrayBag bag){
ArrayBag newBag;
vector<int> diff;
set_difference(items,items + getCurrentSize(),bag.items,bag.items +
bag.getCurrentSize(),
inserter(diff,diff.begin()));
for (int i = 0; i < diff.size(); i++) {
newBag.add(diff[i]);
}
return(newBag);
解决方案
您没有使用正确的功能。你需要std::set_symmetric_difference
得到两组的差异。当你使用set_difference
它时,它只复制第一组中没有在第二组中找到的元素。使用std::set_symmetric_difference
它会将两个集合中都不存在的元素复制到一个新集合中。您可以通过以下方式看到:
int main()
{
std::vector<int> v1{1, 3, 3, 4, 5, 5, 7, 7, 8, 9, 9, 11, 12, 12, 12, 16};
std::vector<int> v2{-100, -4, 1, 3, 3, 4, 5, 6, 7, 8, 8, 9, 11, 12, 12, 12, 15, 19};
std::vector<int> v_symDifference;
std::set_symmetric_difference(
v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(v_symDifference));
for(int n : v_symDifference)
std::cout << n << ' ';
}
哪个输出
-100 -4 5 6 7 8 9 15 16 19
你可以在这个活生生的例子中看到它的实际效果
推荐阅读
- python - 转换python2代码时如何比较python3中的无类型
- java - Spring Security 5 - 为 JWT 和 OpaqueTokens 设置 AuthenticationManagerResolver 失败
- mongodb - 如何覆盖猫鼬内置的 execPopulate() 方法?
- java - Luaj newInstance("java.lang.Byte") 返回 java.lang.Integer
- python - Python - 如何在公共 IP 和端口上侦听 UDP 数据?
- c# - 动态编译类的 GetTypes 无法加载程序集
- java - 我如何使用 JDA 更改 Discord Bot 的缺口
- date - Power Bi 中带日期的度量
- sql-server - 避免使用 mssql 进行多个一对多连接的数据重复
- reactjs - 获取错误对象作为 React 子对象无效