51 votes

J'aimerais voir un exemple de hash_map en C++.

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 ?

52voto

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.

9voto

Nikolai N Fetissov Points 52093

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

5voto

Manuel Points 5396

Wikipedia ne laisse jamais tomber :

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

4voto

Ben Points 1025

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

1voto

Jerry Coffin Points 237758

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X