我想使用 C++ 执行多集交集

Sye*_*hid -1 c++ set multiset set-intersection

我正在使用std::set<int>多集类std::multiset<int>来执行一些集合操作 - 并集、交集等。问题是我必须在两个多集之间执行交集,这样我也可以获得重复值。当我将它与简单集合(而不是多集合)一起使用时,交集工作正常,例如

Set1={1,2,3,4,5,6}
Set2={4,5,6,7,8,9}
然后
std::set_intersection 给我一个正确的结果,即 {4,5,6}

但是,如果我有一个多重集

多组1{1,1,2,2,3,3,4,4,5,5,6,6}
多组2{4,4,5,5,6,6,7,7,8, 8,9,9}

我再次使用 std::set_intersection 它再次给我结果 {4,5,6}

这是不正确的,因为实际的交集是 {4,4,5,5,6,6}

尽管我使用多重集来保存交集的结果,但我仍然得到错误的答案。

谁能告诉我如何解决这个问题。

小智 6

麻烦您把代码贴出来看看是否有错误?我已经编写了一个交叉点示例,如下所示,并且它有效。

multiset<int> ms1;
ms1.insert(1);
ms1.insert(1);
ms1.insert(1);
ms1.insert(2);
ms1.insert(3);

multiset<int> ms2;
ms2.insert(1);
ms2.insert(1);
ms2.insert(2);
ms2.insert(2);
ms2.insert(4);

vector<int> v(10);
set_intersection( ms1.begin(), ms1.end(), ms2.begin(), ms2.end(), v.begin() );
Run Code Online (Sandbox Code Playgroud)

结果是 1, 1, 2。这是正确的!