2010-10-21 24 views
5

¿Hay alguna manera de ordenar std :: map por los datos en lugar de la clave? En este momento, mi código duplica todo el mapa en una matriz solo para hacer esto.std :: map ordena por datos?

+1

¿Adivina que necesita otro mapa con la clave/valor invertido? –

+0

No he encontrado una buena solución tampoco. No se puede simplemente intercambiar el mapa (como sugieren muchos) porque dos valores podrían ser iguales, creando un nuevo mapa que podría tener menos elementos. De hecho, ** es imposible ** clasificar un mapa por valor, ya que un mapa está ordenado por clave (de ahí que sea rápido). Incluso si intentas crear un nuevo mapa que esté ordenado, al presionar los valores como un vector, ¡terminarás con un mapa ordenado por clave! La forma en que implementé en mi código fue crear vectores ordenados para cada una de las claves y valores, y usé los vectores en mi aplicación. Para hacer los vectores, primero – user2544830

+0

¿Posible duplicado de [Mapa STL -> ordenar por valor?] (Http://stackoverflow.com/questions/2699060/stl-map-sort-by-value) –

Respuesta

3

Por lo que puedo recordar, std::map le dará el iterador que examinará los elementos ordenados por la clave. La única forma de repasar los elementos ordenados por el valor, y aún usar el mapa, es reescribir toda la colección a otro mapa, con la clave y el valor invertidos.

+0

Encontré que usar un solo vector y simplemente encontrar cosas era mejor. – Jookia

+2

Si lo hace, perderá la información del par clave-valor. –

+0

Señalo la respuesta de Oli Charlesworth en http://stackoverflow.com/a/5056797/158371 –

Cuestiones relacionadas