2011-08-17 25 views

Respuesta

85

Usted puede hacer algo como:

std::set<int> s1; 
std::set<int> s2; 
// fill your sets 
s1.insert(s2.begin(), s2.end()); 
+2

Estoy tratando de entender la diferencia entre el inserto para el conjunto múltiple y combinar, en el contexto de la fusión. Insertar toma O (logn) para cada inserción, por lo que O (nlogn) en total; donde n es el tamaño del contenedor más pequeño. Mientras que la fusión solo necesita O (n1 + n2). La única razón por la que puedo pensar para usar insertar es que acepta cualquier iterador y el hecho de que la segunda complejidad tiene un coeficiente de tres antes. ¿Hay alguna otra razón fuerte para favorecer la inserción sobre la combinación? – sumodds

+1

No realmente, excepto que, en igualdad de condiciones, es la solución más simple y general. –

+1

Esta es una solución subóptima. Ver la respuesta de Antonio Pérez. – ManuelSchneid3r

26

Parece que usted está pidiendo std::set_union.

+4

En caso de que no necesite cambiar las estructuras originales, esta solución es la mejor. – freitass

5

mira lo std :: fusión puede hacer por usted

cplusplus.com/reference/algorithm/merge

+5

@MooingDuck No veo el problema con el uso de merge. Merge hace lo mismo que union, pero no hace nada especial con duplicados como union does. E insertar un duplicado es manejado por el propio conjunto. – gsingh2011

Cuestiones relacionadas