C++:将 std::set_union() 输出存储在 std::multiset 中
C++: Storing std::set_union() output in a std::multiset
我想在两个 multisets
之间执行 union
操作。
不过,目前我只能想办法将操作的输出存储到std::vector
,然后我必须将向量转换为多重集。
我的测试的这种转换非常昂贵,我想避免这种情况,因为我需要作为多重集的输出。
我怎样才能做到这一点?
代码:
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
int main () {
multiset<int> m, p;
m.insert(4);
m.insert(4);
m.insert(2);
m.insert(1);
m.insert(7);
p.insert(2);
p.insert(2);
p.insert(2);
p.insert(1);
p.insert(5);
vector<int> v;
set_union(m.begin(), m.end(), p.begin(), p.end(), back_inserter(v));
multiset<int> result(v.begin(), v.end());
multiset<int>::iterator it;
for (it=result.begin(); it!=result.end(); it++)
cout << *it << " ";
return 0;
}
输出如预期的那样 1 2 2 2 4 4 5 7
。
您需要 std::insert_iterator
。它的工作方式类似于 std::back_inserter
,但只是插入而不是在后面插入。您可以通过调用 std::inserter(c)
创建一个,其中 c
是目标容器。第一个示例 here 显示插入器到 std::multiset
.
我想在两个 multisets
之间执行 union
操作。
不过,目前我只能想办法将操作的输出存储到std::vector
,然后我必须将向量转换为多重集。
我的测试的这种转换非常昂贵,我想避免这种情况,因为我需要作为多重集的输出。
我怎样才能做到这一点?
代码:
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
int main () {
multiset<int> m, p;
m.insert(4);
m.insert(4);
m.insert(2);
m.insert(1);
m.insert(7);
p.insert(2);
p.insert(2);
p.insert(2);
p.insert(1);
p.insert(5);
vector<int> v;
set_union(m.begin(), m.end(), p.begin(), p.end(), back_inserter(v));
multiset<int> result(v.begin(), v.end());
multiset<int>::iterator it;
for (it=result.begin(); it!=result.end(); it++)
cout << *it << " ";
return 0;
}
输出如预期的那样 1 2 2 2 4 4 5 7
。
您需要 std::insert_iterator
。它的工作方式类似于 std::back_inserter
,但只是插入而不是在后面插入。您可以通过调用 std::inserter(c)
创建一个,其中 c
是目标容器。第一个示例 here 显示插入器到 std::multiset
.