web-dev-qa-db-fra.com

Fusionner plusieurs éléments d'ensembles en un seul ensemble

Je voudrais savoir s'il existe une bibliothèque std ou un outil boost pour fusionner facilement le contenu de plusieurs ensembles en un seul.

Dans mon cas, j'ai quelques ensembles de pouces que je voudrais fusionner.

55
codeJack

Vous pouvez faire quelque chose comme:

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

On dirait que vous demandez std::set_union .

Exemple:

#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
35
Antonio Pérez

regardez ce que std :: merge peut faire pour vous

cplusplus.com/reference/algorithm/merge

10
Nelstaar

Avec C++ 17, vous pouvez utiliser directement la fonction merge de set.

C'est mieux lorsque vous voulez que les éléments set2 soient extraits et insérés dans set1 dans le cadre de la fusion.

Comme ci-dessous:

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)
9