C ++: Сохранение вывода std :: set_union () в std :: multiset - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу выполнить 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 голосов
/ 10 сентября 2018

Вам нужен std::insert_iterator. Он работает как std::back_inserter, но просто вставляет вместо вставки сзади. Вы можете создать его, вызвав std::inserter(c), где c - целевой контейнер. Первый пример здесь показывает вставку в std::multiset.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...