J'ai deux conteneurs STL que je veux fusionner, en supprimant tous les éléments qui apparaissent plusieurs fois. Par exemple:La meilleure façon de fusionner plusieurs conteneurs STL, en supprimant les éléments en double?
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, semble être pour les éléments adjacents seulement, et dans mon cas, les conteneurs pourrait être dans un ordre quelconque. Je pourrais faire quelques std :: set supercherie je suppose:
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());
}
Y at-il une meilleure façon ou d'avoir manqué quelque chose que je saignement évident?
Si vous demandez quelque chose "saignant évident", votre implémentation est assez bonne pour les cas de moust. Mais un meilleur algorithme existe, au prix de O (N * log (M)), où N est le nombre total d'éléments dans tous les conteneurs, et M est le nombre de conteneurs. Le code n'est pas trivial, je l'écrirai plus tard quand j'ai le temps. – RnMss