我想使用 C++ 执行多集交集
I want to perform a multi-set intersection using C++
我正在使用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}
但是,如果我有一个多集
multi-set1{1,1,2,2,3,3,4,4,5,5,6,6}
multi-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。这是正确的!
set_intersection实际上也对多集执行交集。我想你对set_intersection的呼吁是错误的。您必须满足的一些要求,如参考中所述,例如:
生成的范围不能与任一输入范围重叠。
但是,请参阅以下代码:
#include <iostream>
#include <iterator> // inserter
#include <algorithm> // set_intersection
#include <set> // multiset
int main() {
std::multiset<int> set1 = { 1,1,2,2,3,3,4,4,5,5,6,6 };
std::multiset<int> set2 = { 4,4,5,5,6,6,7,7,8,8,9,9 };
std::multiset<int> intersection;
std::set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(intersection, intersection.begin()));
// prints: 4 4 5 5 6 6
for(int elem : intersection) {
std::cout << elem << ' ';
}
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 如何使用原子指针执行双缓冲