C ++:将std :: set_union()输出存储在std :: multiset

时间:2018-09-09 22:27:23

标签: c++ std multiset

我想在两个union之间执行multisets操作。

但是,此刻我只能弄清楚将操作的输出存储到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

1 个答案:

答案 0 :(得分:3)

您需要一个std::insert_iterator。它的工作方式类似于std::back_inserter,但只是插入而不是在后面插入。您可以通过调用std::inserter(c)创建一个对象,其中c是目标容器。第一个示例here显示了在std::multiset中的插入器。