ejemplo - multimap c++
Me gustarĂa ver un ejemplo de hash_map en C++ (5)
No sé cómo usar la función hash en C ++, pero sé que podemos usar hash_map
. ¿ #include <hash_map>
g ++ eso simplemente incluyendo #include <hash_map>
? ¿Qué es un ejemplo simple usando hash_map
?
El estándar actual de C ++ no tiene mapas hash, pero el estándar C ++ 0x viene, y estos ya son compatibles con g ++ en la forma de "mapas desordenados":
#include <unordered_map>
#include <iostream>
#include <string>
using namespace std;
int main() {
unordered_map <string, int> m;
m["foo"] = 42;
cout << m["foo"] << endl;
}
Para obtener esta compilación, necesita decirle a g ++ que está usando C ++ 0x:
g++ -std=c++0x main.cpp
Estos mapas funcionan más o menos como lo hace std :: map, excepto que en lugar de proporcionar un operator<()
para sus propios tipos, debe proporcionar una función hash personalizada: se proporcionan funciones adecuadas para tipos como enteros y cadenas.
El nombre aceptado en TR1 (y el borrador para el próximo estándar) es std::unordered_map
, por lo que si lo tiene disponible, probablemente sea el que quiera usar.
Aparte de eso, usarlo es muy similar a usar std::map
, con la condición de que cuando / si recorre los elementos en un std::map
, salen en el orden especificado por el operator<
, pero para un std::map
no ordenado, el orden generalmente no tiene sentido
Wikipedia nunca decepciona:
hash_map es una extensión no estándar. unordered_map es parte de std :: tr1, y se moverá al espacio de nombres std para C ++ 0x. http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29
#include <tr1/unordered_map>
obtendrá el siguiente contenedor de hash único estándar de C ++. Uso:
std::tr1::unordered_map<std::string,int> my_map;
my_map["answer"] = 42;
printf( "The answer to life and everything is: %d/n", my_map["answer"] );