Je ne sais pas comment utiliser la fonction de hachage en C++, mais je sais qu'on peut utiliser hash_map
. Est-ce que g++ supporte cela en incluant simplement #include <hash_map>
? Quel est un exemple simple utilisant hash_map
?
Réponses
Trop de publicités?La norme C++ actuelle ne comporte pas de cartes de hachage, mais la future norme C++0x en comportera, 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;
}
Afin d'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 carte personnalisée operator<()
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 de caractères.
#include <tr1/unordered_map>
vous permettra d'obtenir un C++ de niveau supérieur conteneur de hachage unique . Utilisation :
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"] );
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 le TR1 (et le projet de la prochaine norme) est le suivant std::unordered_map
Donc, si vous disposez de cette option, c'est probablement celle que vous devez utiliser.
En dehors de cela, son utilisation est très similaire à celle de l'option std::map
à condition que, si vous parcourez les éléments dans une 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 pas de sens.