web-dev-qa-db-fra.com

Je voudrais voir un exemple de hash_map en C ++

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?

49
skydoor

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. .

51
anon

#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"] );
9
Nikolai Fetissov

Wikipédia ne laisse jamais tomber:

http://en.wikipedia.org/wiki/Hash_map_ (C% 2B% 2B)

5
Manuel

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

4
Ben

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.

1
Jerry Coffin