Meilleure façon de fusionner plusieurs conteneurs STL, en supprimant les éléments en double?

J'ai deux conteneurs STL que je veux fusionner, en supprimant les éléments qui apparaissent plus d'une fois. Par exemple:

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 peuvent être dans n'importe quel ordre. J'ai pu faire quelques std::set ruse, 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());
}

Est-il une meilleure façon ou ai-je raté quelque chose évidences?

Si vous demandez quelque chose "évidences", votre application est assez bon pour moust cas. Mais un meilleur algorithme n'existe pas, au coût de O(N * log(M)), où N est le nombre total d'éléments dans tous les contenants, et M est le nombre de conteneurs. Le code n'est pas anodin, je vais écrire plus tard, quand j'ai le temps.
Vraiment? Vous pouvez poster une réponse? ...
omg C'était en 2014...
Maintenant, je ne suis pas sûr à ce sujet. Je pense que ... , à en juger par ce que j'ai écrit, que ... peut-être ... à ce moment, j'ai pensé que chaque conteneur sont déjà triés, mais le nombre de conteneurs pourrait être un plus grand nombre (genre 1000 ou plus).

OriginalL'auteur Rob | 2008-11-11