C++ 设置差异问题,不返回所有值或重复项
我正在尝试使用数组,并将第一个(bag1)和第二个(bag2)数组中没有出现的整数输出到新的第三个(newbag)数组中。该函数没有给出正确的差异。如果一个包中的某个数量多于一个,则它还需要包含任何副本 我的输出缺少列表中的重复项:C++ 设置差异问题,不返回所有值或重复项,c++,C++,我正在尝试使用数组,并将第一个(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 我
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);
const-ArrayBag-ArrayBag::operator-(const-ArrayBag-bag){
ArrayBag-newBag;
向量差;
设置差异(项目,项目+getCurrentSize(),bag.items,bag.items+
bag.getCurrentSize(),
插入器(diff,diff.begin());
对于(int i=0;i
您没有使用正确的函数。您需要获得两个集合的差异。当您使用set\u difference
时,它只复制第一个集合中在第二个集合中找不到的元素。使用std::set\u symmetric\u 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 << ' ';
}
你可以在这个中看到它的作用,所以问题是
Bag 1
有5
两次,而Bag 2
有5
一次,因此你希望输出也包括5
(一次),对吗?
-100 -4 5 6 7 8 9 15 16 19