web-dev-qa-db-fra.com

carte d'incrémentation <chaîne, int> à l'aide de l'opérateur ++

J'ai une carte pour compter l'occurrence des mots dans un fichier. Je lis des mots du fichier et chaque fois que je lis un mot, je veux faire ceci:

map[Word]++; //(where map is the name of my map, I'm not using map as a name of course)

de sorte que si ma carte a déjà "Word" comme clé, il l'incrémente, sinon il crée la nouvelle clé et l'incrémente.

Voici ce qui m'inquiète: si je mappe [Word] ++ sur une nouvelle clé (ce qui est inévitable dans la première lecture de Word), mon programme se bloquera-t-il parce que l'int dans ma carte est unialisé? Si oui, quelle est la façon la plus efficace de dire ma carte: si le mot est déjà là, faites ++ sur la valeur, sinon, créez la nouvelle clé avec valeur = 1? L'utilisation d'une instruction if avec 'map.find' semble ici inutilement redondante, qu'en pensez-vous?

Merci

53
Edoz

mon programme plantera-t-il parce que l'intégralité de ma carte est unialisée?

Non; si l'élément avec la clé Word n'existe pas, l'élément sera créé et la valeur initialisée. Un int initialisé par une valeur a une valeur de 0.

58
James McNellis