Объединения нескольких наборов в единый набор


Я хотел бы знать, есть ли какая-либо библиотека std или инструмент boost, чтобы легко объединить содержимое нескольких наборов в один.

в моем случае у меня есть несколько наборов ints, которые я хотел бы объединить.

4 51

4 ответа:

вы можете сделать что-то вроде:

std::set<int> s1;
std::set<int> s2;
// fill your sets
s1.insert(s2.begin(), s2.end());

похоже, вы просите std::set_union.

пример:

#include <set>
#include <algorithm>

std::set<int> s1; 
std::set<int> s2; 
std::set<int> s3;

// Fill s1 and s2 

std::set_union(std::begin(s1), std::end(s1),
               std::begin(s2), std::end(s2),                  
               std::inserter(s3, std::begin(s3)));

// s3 now contains the union of s1 and s2

посмотрите, что std:: merge может сделать для вас

cplusplus.com/reference/algorithm/merge

С C++17, вы можете использовать merge функции set напрямую.

это лучше, когда вы хотите, чтобы элементы set2 извлекались и вставлялись в set1 как часть слияния.

, как показано ниже:

set<int> set1{ 1, 2, 3 };
set<int> set2{ 1, 4, 5 };

// set1 has     1 2 3       set2 has     1 4 5
set1.merge(set2);
// set1 now has 1 2 3 4 5   set2 now has 1   (duplicates are left in the source, set2)