【问题标题】:C++: Storing std::set_union() output in a std::multisetC++:将 std::set_union() 输出存储在 std::multiset 中
【发布时间】:2019-02-14 09:00:13
【问题描述】:

我想在两个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

【问题讨论】:

    标签: c++ std multiset


    【解决方案1】:

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

    【讨论】:

    • 为什么std::inserter(c, c.end()) 需要c.end() 而不需要std::back_inserter(c)
    • std::back_inserter 总是插入到end(),所以你不必说出来。同样,std::front_inserter 始终插入到 begin()
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多