2009-12-22 4 views
0

Voici ce que j'ai, je suis nouveau à C++, donc je ne suis pas sûr si cela est juste ...comment rechercher hash_map en C++?

typedef pair<string, int>:: make_pair; 
hash_map <string, int> dict; 
dict.insert(make_pair("apple", 5)); 

Je veux donner mon hash_map « pomme », et je veux revenir 5. Comment est-ce que je le fais?

Répondre

9

hash_map est pas standard C++ de sorte que vous devriez vérifier la documentation de la bibliothèque qui vous utilisez (ou au moins nous dire son nom), mais très probablement cela fonctionnera:

hash_map<string, int>::iterator i = dict.find("apple"); 

if (i == dict.end()) { /* Not found */ } 
else { /* i->first will contain "apple", i->second will contain 5 */ } 

Alternativement, si vous savez avec certitude que "apple" est en dict, vous pouvez également faire: dict["apple"]. Par exemple cout << dict["apple"]; va imprimer 5.

Aussi, pourquoi le typedef dans votre code? Tu ne peux pas utiliser std::make_pair? Et, il ne compilera pas la façon dont vous l'avez écrit (avec les deux principaux colons)

+1

+1 Si vous connaissez * * que 'dict 'contient apple, vous pouvez également utiliser' dict ["apple"] '. Cela peut être légèrement moins efficace, mais plus clair dans certaines situations. –

+0

Ajouté à ma réponse, merci –

+0

Probablement hash_map fonctionne comme carte, et si la clé n'est pas déjà présente, il l'ajoutera avec la valeur 0. Il le fait dans le hash_map SGI, de toute façon. –

0

itérer votre hashmap, vecteur, liste et d'autres structures:

for(hash_map<string,int>::iterator i = dict.begin(); i != dict.end(); i++) 
{ 
    cout << "key(string): " << i->first << ", value(int): " << i->second << endl; 
}