Ich würde gerne wissen, ob es eine Standardbibliothek oder ein Boost-Tool gibt, mit denen der Inhalt mehrerer Sets einfach zu einem einzigen zusammengeführt werden kann.
In meinem Fall habe ich einige Sätze von Ints, die ich zusammenführen möchte.
Antworten:
Sie können so etwas tun wie:
std::set<int> s1;
std::set<int> s2;
// fill your sets
s1.insert(s2.begin(), s2.end());
std::set_union()
der Leistung sollten Sie die Kosten für std::set::insert()
wiederholte Anrufe berücksichtigen .
Sieht so aus, als würden Sie danach fragen std::set_union
.
Beispiel:
#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
Mit C ++ 17 können Sie die merge
Funktion von set
direkt verwenden.
Dies ist besser, wenn die set2-Elemente im Rahmen des Zusammenführens extrahiert und in set1 eingefügt werden sollen.
Wie unten:
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)
Schauen Sie, was std :: merge für Sie tun kann