я использую 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}
Однако, если у меня есть мультимножество
мульти-SET1 {1,1,2,2,3,3,4,4,5,5,6,6}
мульти-SET2 {4,4,5,5,6,6,7,7,8,8,9,9}
и я снова использую std :: set_intersection, он снова дает мне результат {4,5,6}
что не правильно, потому что фактическое пересечение {4,4,5,5,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() );
результат 1, 1, 2. что правильно!
Других решений пока нет …