Con la configuración actual que tiene, no hay una manera fácil de hacerlo; Tendría que iterar sobre todos los elementos del mapa buscando el que tenía Map3
como valor.
El map
está optimizado para buscar relaciones en una dirección. Dado un map<K, V>
, puede mapear fácilmente desde K
s al V
s, pero no al revés. La razón es que debido a que puede almacenar cualquier V
como valor, no hay garantía de que obtendrá un inverso único. Es decir, dado este mapa:
0 -> 0
1 -> 0
2 -> 1
No hay una forma significativa de decir qué tecla tiene valor 0; hay dos de estas claves, 0 y 1.
Tiene muchas opciones aquí. En primer lugar, podría convertir el map
en lugar de asociar cadenas con enteros, en lugar de números enteros con cadenas. De acuerdo con su caso de uso, esto parece ser lo que quería hacer en primer lugar.Si hiciera eso, entonces sólo podría utilizar el operador de corchetes para buscar el valor asociado:
cout << m["Map3"] << endl;
O, si estaban preocupados por lo que pasaría con los valores que faltan, entonces se podría escribir
map<string, int>::iterator itr = m.find("Map3");
if (itr != m.end()) {
/* ... use itr to read the values ... */
}
Alternativamente, si realmente tiene que tener el mapa de enteros a cadenas, y sabe que cada entero está emparejado con una cadena única y viceversa (es decir, el mapa es una biyección), entonces podría usar un Boost.Bimap para codificar esta relación bidireccional. Esto haría que sea muy fácil ir y venir entre las claves y los valores.
Espero que esto ayude!
¿Obtuvo el requisito correcto? Supongo que querías la clave al conocer el valor. – Jagannath
Si el número entero en el par es su valor, entonces tiene su clave, par de valores en el orden opuesto. Debe ser 'pair'. Entonces, si el usuario selecciona '3', entonces puede buscarlo como:' m [cadena ("mapa") + cadena (itoa (selección))] '. –
yasouser
Me imaginé que la rutina para mostrar el menú se repetirá a través del contenedor, por lo que la opción del menú realmente sería (uno más que) el índice. La respuesta entonces es iterar el contenedor para identificar cuál fue la opción, tal como se hizo para mostrarla. – Steve314