Tengo un montón de datos llenos de duplicados y quiero eliminar los duplicados. Ya sabes, por ejemplo [1, 1, 3, 5, 5, 5, 7] se convierte en [1, 3, 5, 7].C++ std :: map o std :: set - insertar de manera eficiente duplicados
Parece que puedo usar std :: map o std :: set para manejar esto. Sin embargo, no estoy seguro de si es más rápido (a) simplemente insertar todos los valores en el contenedor, o (b) verificar si ya existen en el contenedor y solo insertar si no lo hacen: ¿los insertos son muy eficientes? Incluso si hay una mejor manera ... ¿puedes sugerir una manera rápida de hacer esto?
Otra pregunta: si los datos que estoy almacenando en ellos no son tan triviales como enteros, y en su lugar es una clase personalizada, ¿cómo logra std :: map almacenar correctamente (hash?) Los datos para una rápida acceso a través del operador []?
Un 'conjunto 'sería más adecuado ya que no necesita un valor asociado con cada elemento. Voy a adivinar que revisar y luego insertar en el conjunto será más lento que simplemente insertar porque esencialmente tendrías que hacer dos búsquedas clave en el primero. – GWW
Por definición, cualquiera de ellos comprobará * por usted * cuando realice la inserción. Es decir. ellos harán lo que de otro modo harían con algún otro contenedor: verificar la existencia. Personalmente, iría con el set a menos que intencionalmente estés mapeando algo con otra cosa. – WhozCraig
¿Los datos están siempre ordenados? Porque parece que desea [std :: unique] (http://msdn.microsoft.com/en-us/library/9f5eztca (v = vs.100) .aspx), no es un contenedor nuevo –