Ich habe zwei STL-Container, die ich zusammenführen möchte, entfernen alle Elemente, die mehr als einmal angezeigt werden. Zum Beispiel:Die beste Methode zum Zusammenführen mehrerer STL-Container, doppelte Elemente entfernen?
typedef std::list<int> container;
container c1;
container c2;
c1.push_back(1);
c1.push_back(2);
c1.push_back(3);
c2.push_back(2);
c2.push_back(3);
c2.push_back(4);
container c3 = unique_merge(c1, c2);
// c3 now contains the following 4 elements:
// 1, 2, 3, 4
std :: einzigartig scheint nur für benachbarte Elemente zu sein, und in meinem Fall die Behälter in beliebiger Reihenfolge sein könnten. Ich konnte einige std :: tun List gesetzt Ich denke:
container unique_merge(const container& c1, const container& c2)
{
std::set<container::value_type> s;
BOOST_FOREACH(const container::value_type& val, c1)
s.insert(val);
BOOST_FOREACH(const container::value_type& val, c2)
s.insert(val);
return container(s.begin(), s.end());
}
Gibt es einen besseren Weg, oder habe ich etwas Blutungen offensichtlich verpasst?
Wenn Sie nach etwas fragen "bluten offensichtlich", ist Ihre Implementierung gut genug für Moust Cases. Aber es gibt einen besseren Algorithmus auf Kosten von O (N * log (M)), wobei N die Gesamtzahl der Elemente in allen Containern und M die Anzahl der Container ist. Der Code ist nicht trivial, ich schreibe später wenn ich Zeit habe. – RnMss