oui, les map sont très utiles :-)
Un petit truc qui m'a posé des soucis:
Si tu cherches une valeur pour une association qui n'existe pas, le map va créer une entrée. Par exemple si tu fais:
int val=ma_map[String("cent")];
Alors que tu n'as jamais fait de
le map crée une nouvelle entrée avec une valeur par défaut ce qui risque de te retourner des valeurs erronées.
Il y a donc une fonction pour rechercher la pair directement dans le map:
map<String,int>::iterator pointer=ma_map.find("cent");
Cette fonction retourne un pointeur sur un pair<String,int> et, si aucune paire n'a été trouvée, alors ce pointeur vaut "ma_map.end()".
Tu peux donc t'assurer qu'une valeur existe dans la map avec le code suivant:
1 2 3 4 5 6
| map<String,int>::iterator pointer=ma_map.find("cent");
if (pointer==ma_map.end()) {
// Erreur: "cent" n'a pas encore été enregistré
}
int val=pointer->second; // Retourne le second terme de la pair, càd la valeur
int val2=ma_map["cent"]; // Même résultat mais moins performant puisqu'il faut à nouveau parcourir la map à la recherche de la clé |
Voilà, c'est le point un peu faible des map à mon avis: impossible de savoir facilement si une clé a déjà été enregistrée ou non.
PS: Il y a aussi un map<String,int>::const_iterator utile si tu travailles dans une fonction qui garanti que la map est const
Partager