¿Hay alguna manera en C++ para buscar el valor asignado (en lugar de la clave) de un mapa, y luego devolver la clave? Por lo general, hago someMap.find(someKey)->second
para obtener el valor, pero aquí quiero hacer lo contrario y obtener la clave (los valores y las claves son todos únicos).Buscar el valor asignado del mapa
Respuesta
Debido a la forma en que se diseña un map
, deberá hacer el equivalente de una búsqueda de datos no ordenados.
for (it = someMap.begin(); it != someMap.end(); ++it)
if (it->second == someValue)
return it->first;
Es lo mismo. Simplemente está desmarcando el puntero en lugar de llamar ->. Probablemente compila exactamente el mismo código. – Falmarri
Eso puede ser exactamente lo que se necesita, pero solo un comentario: devuelve la primera clave, que puede no ser la única que se asigna a 'someValue'. Incluso si luego se borra o se altera para que no coincida en la próxima búsqueda, no es bueno reiniciar innecesariamente la iteración desde begin(), pero ese valor del iterador inicial se puede pasar como un argumento de función. Espero que el afiche pueda buscar los detalles a medida que surjan. –
@Falmarri Sé que hace lo mismo, solo me pregunto si hay una razón específica para hacerlo de esa manera. Me parece que el código no es tan bueno como 'it (flecha) key' :) – wrongusername
Lo que estás buscando es un BIMAP, y no es una implementación de la misma disponible en Boost: http://www.boost.org/doc/libs/1_36_0/libs/bimap/doc/html/index.html
struct test_type
{
CString str;
int n;
};
bool Pred(std::pair< int, test_type > tt)
{
if(tt.second.n == 10)
return true;
return false;
}
std::map< int, test_type > temp_map;
for(int i = 0; i < 25; i++)
{
test_type tt;
tt.str.Format(_T("no : %d"), i);
tt.n = i;
temp_map[ i ] = tt;
}
auto iter = std::find_if(temp_map.begin(), temp_map.end(), Pred);
¿Puedes dar una explicación con el código? – rjdkolb
Podemos crear un reverseMap que asigna valores a las teclas.
igual,
map<key, value>::iterator it;
map<value, key> reverseMap;
for(it = originalMap.begin(); it != originalMap.end(); it++)
reverseMap[it->second] = it->first;
Esto también es básicamente como una búsqueda lineal, pero será útil si usted tiene un número de consultas.
- 1. Obtener el valor del mapa
- 2. Buscar valor específico en std :: mapa
- 3. Buscar en el mapa inverso
- 4. Extracción del elemento del mapa por valor
- 5. Actualizar y reemplazar el valor del mapa
- 6. ASP.NET/IIS6: ¿Cómo buscar en el mapa mime del servidor?
- 7. Eclipse Juno: valor de cierre no asignado
- 8. La asignación de propiedad Objective-C devuelve el valor asignado?
- 9. ActiveRecord, Buscar por valor del atributo anidado
- 10. lista como valor del mapa en griales
- 11. Insertar par como valor del mapa
- 12. return por el valor asignado a la referencia de const
- 13. Clojure extrae el valor del mapa según la lógica priorizada
- 14. Obtener el primer valor del mapa en C++
- 15. Buscar clave por valor
- 16. Buscar XElement por valor de atributo
- 17. Buscar valor en Array
- 18. jquery buscar clase y obtener el valor
- 19. Encontrar el valor mínimo en un mapa
- 20. La consola de JavaScript imprime el valor asignado de la variable antes de que se le haya asignado?
- 21. php obtener las variables clave como sin valor asignado
- 22. ¿Valor de mapa de acceso a través del índice?
- 23. ordena las entradas del mapa concurrente por valor
- 24. Buscar el índice de un NSArray pasando el valor
- 25. Cómo buscar un valor específico en las claves del Registro
- 26. ¿Referencia al valor del elemento de mapa STL?
- 27. Gson ignorando las entradas del mapa con valor = nulo
- 28. Buscar nodo TreeView por valor
- 29. buscar matriz asociativa por valor
- 30. Cómo acceder y actualizar un valor en un mapa mutable del mapa de mapas
posible duplicado de [¿Hay una buena manera de buscar por clave y valor?] (Http://stackoverflow.com/questions/3848483/is-there-a-good-way-to-search-by- both-key-and-value) –
@Fred: la pregunta vinculada nunca recibió una respuesta, solo una alternativa (que parecía satisfacer esa necesidad particular, pero ese no es el punto). –
Posible duplicado de [Comprobar el valor existe en un estándar :: mapa - C++] (http://stackoverflow.com/questions/535317/checking-value-exist-in-a-stdmap-c) – CharlesB