Je ne sais pas comment utiliser la fonction de hachage en C++, mais je sais que nous pouvons utiliser hash_map
. Est-ce que g ++ supporte cela en incluant simplement #include <hash_map>
? Quel est un exemple simple utilisant hash_map
?
La norme C++ actuelle n'a pas de cartes de hachage, mais la norme C++ 0x à venir en a, et celles-ci sont déjà prises en charge par g ++ sous la forme de "cartes non ordonnées":
#include <unordered_map>
#include <iostream>
#include <string>
using namespace std;
int main() {
unordered_map <string, int> m;
m["foo"] = 42;
cout << m["foo"] << endl;
}
Pour obtenir cette compilation, vous devez indiquer à g ++ que vous utilisez C++ 0x:
g++ -std=c++0x main.cpp
Ces cartes fonctionnent à peu près comme std :: map, sauf qu'au lieu de fournir une fonction operator<()
personnalisée pour vos propres types, vous devez fournir une fonction de hachage personnalisée - des fonctions appropriées sont fournies pour des types comme les entiers et les chaînes. .
#include <tr1/unordered_map>
vous permettra d'obtenir le conteneur de hachage unique C++ standard suivant . Usage:
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"] );
Wikipédia ne laisse jamais tomber:
hash_map est une extension non standard. unordered_map fait partie de std :: tr1 et sera déplacé dans l'espace de noms std pour C++ 0x. http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29
Le nom accepté dans TR1 (et le projet de norme suivante) est std::unordered_map
, donc si vous en avez, c'est probablement celui que vous souhaitez utiliser.
En dehors de cela, son utilisation ressemble beaucoup à l'utilisation de std::map
, à condition que lorsque/si vous parcourez les éléments dans un std::map
, ils sortent dans l'ordre spécifié par operator<
, mais pour une carte non ordonnée, l'ordre n'a généralement aucun sens.