2010-12-01 45 views
0

Je crée une table de hachage simple dans VS 2008 C++.Comment créer une table de hachage en C++?

#include <map> 
std::map <string, char> grade_list; 
grade_list["John"] = 'B'; 

Je reçois l'erreur: erreur C2057: expression constante attendue

Qu'est-ce que cela signifie? Est-ce que boost library a quelque chose de mieux?

Merci!

+3

Pour un programme minuscule, vous avez posté quelque chose qui n'est même pas susceptible de compiler faute d'une fonction principale, et des en-têtes manquants comme Vatsan

+0

@Vatsan - C'était le problème. Je n'ai pas mis ce code dans la fonction principale. –

Répondre

6
#include <map> 
#include <iostream> 
#include <string> 

int main() { 
    std::map<std::string, char> grade_list; 
    grade_list["John"] = 'B'; 
    std::cout << grade_list["John"] << std::endl; 
    return 0; 
} 

Cela fonctionne très bien avec g ++. Vous devez spécifier la chaîne std :: before dans votre déclaration de carte, comme je l'ai fait dans mon code.

10

Tout d'abord std::map est un treemap, pas un hashmap.

La raison pour laquelle vous obtenez l'erreur est que vous n'avez pas #include <string> ni qualifier la référence à string et donc le compilateur ne sait pas que string est une classe.

+2

arrive en C++ 0x. – Vatsan

+0

OK, alors comment créer une table de hachage? –

+1

@BSeven: En utilisant un compilateur qui implémente déjà unordered_map de C++ 0x (les versions récentes de gcc et visual studio font) et en utilisant cela ou en utilisant [boost's implementation] (http://www.boost.org/doc/libs /1_36_0/doc/html/unordered.html). – sepp2k

1

Le code était avant la fonction principale.