C++ 设置差异问题,不返回所有值或重复项

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 我

我正在尝试使用数组,并将第一个(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);
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