values example c++ stl map multimap

c++ - example - multimap java



¿Cuál es la ventaja de multimap sobre el mapa de vectores? (3)

No entiendo por qué existe el multimapa si podemos crear un mapa de vectores o un mapa de conjuntos. Para mí, solo las diferencias son:

  • usando equal_range en multimap para obtener elementos de una clave y en el mapa de vectores, simplemente usamos el operador [] y tenemos un vector de elementos.
  • usando multimap.insert(make_pair(key,value)) en multimap para agregar elementos y map_of_vectors[key].push_back(value) en el mapa de vectores.

Entonces, ¿por qué usar Multimap? Para mí, es mejor tener un vector que dos iteradores para obtener todos los valores de una clave.

Esta pregunta se aplica también a unordered_map of vectors y unordered_multimap.


Hay muchas diferencias importantes entre multimap<x, y> y map<x, vector<y>>

Una vez que haya insertado un valor en Multimap , sabrá que el iterador seguirá siendo válido hasta que lo elimine y esta es una propiedad muy fuerte, no puede tenerlo con un mapa de vectores.

multimap<x,y>::iterator p=mymap.insert(make_pair(a,b));

El iterador sigue siendo válido hasta que se borre del mapa, mientras que en el segundo caso, se invalidará cada vez que agregue una nueva entrada al vector.

También tenga en cuenta que el map<x, vector<y>> puede tener un valor vacío establecido con la clave existente, mientras que multimap no lo tiene.

Estas son cosas diferentes que se comportan de manera diferente.

Y para ser sincero, echo de menos el multimapa en algunos idiomas que no lo proporcionan en su biblioteca.


Yo diría que depende de si todos los valores con la misma clave tienen una relación que desea abordar.

Entonces, por ejemplo, ¿a menudo revisas todos los elementos con la tecla X o los pasas a una función, y así sucesivamente? Entonces es más conveniente tenerlos ya en su contenedor separado, que puede abordar directamente.

Sin embargo, si solo tiene una colección de elementos, que pueden compartir el mismo valor de clave, o no, ¿por qué usar vectores entre ellos? Es más conveniente ejecutar a través del multimapa con iteradores que tener un ciclo anidado para el mapa, caso vectorial.

Otra forma de ver esto: si las entradas múltiples por clave son muy comunes, su estructura es más eficiente en el mapa, caso del vector. Si rara vez ocurren, es todo lo contrario.


dos iteradores ??? Creo que estas equivocado.

cuando uso std :: for_each () u otro algo de en un multimap uso solo UN rango de iteradores, y es mucho más simple que preocuparse con un vector para cada clave.