Tengo dos contenedores STL que deseo fusionar, eliminando los elementos que aparecen más de una vez. Por ejemplo:¿La mejor manera de combinar varios contenedores STL, eliminando elementos duplicados?
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 :: única parece ser sólo elementos adyacentes, y en mi caso los contenedores podrían estar en cualquier orden. Podría hacer algunas std :: set engaño supongo:
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());
}
¿Hay una mejor manera o he perdido algo de sangrado obvio?
Si pide algo "sangrando obvio", su implementación es lo suficientemente buena para los casos de moustle. Pero existe un algoritmo mejor, a costa de O (N * log (M)), donde N es el número total de elementos en todos los contenedores, y M es el número de contenedores. El código no es trivial, escribiré más tarde cuando tenga tiempo. – RnMss