Mam dwa kontenery STL, które chcę scalić, usuwając wszelkie elementy, które pojawiają się więcej niż raz. Na przykład:Najlepszy sposób na połączenie wielu kontenerów STL, usuwanie duplikatów elementów?
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 :: unique wydaje się być tylko dla sąsiednich elementów, aw moim przypadku kontenery mogą być w dowolnej kolejności. Mógłbym zrobić kilka std :: set oszustwa Chyba:
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());
}
Czy istnieje lepszy sposób lub mieć coś przeoczyłem krwawienie oczywiste?
Jeśli poprosisz o coś "krwawiącego oczywiste", twoja implementacja jest wystarczająco dobra dla spraw dotyczących moust. Ale istnieje lepszy algorytm, kosztem O (N * log (M)), gdzie N to całkowita liczba elementów we wszystkich kontenerach, a M to liczba kontenerów. Kod nie jest banalny, napiszę później, kiedy będę mieć czas. – RnMss