Comment mettre à jour std :: map après avoir utilisé la méthode find?

Comment mettre à jour la valeur d’une clé dans std::map après avoir utilisé la méthode find ?

J’ai une déclaration de carte et d’iterator comme ceci:

 map  m1; map ::iterator m1_it; typedef pair  count_pair; 

J’utilise la carte pour stocker le nombre d’occurrences d’un personnage.

J’utilise Visual C ++ 2010.

std::map::find renvoie un iterator à l’élément found (ou à la end() si l’élément n’a pas été trouvé). Tant que la map n’est pas const, vous pouvez modifier l’élément pointé par l’iterator:

 std::map m; m.insert(std::make_pair('c', 0)); // c is for cookie std::map::iterator it = m.find('c'); if (it != m.end()) it->second = 42; 

Je voudrais utiliser l’opérateur [].

 map  m1; m1['G'] ++; // If the element 'G' does not exist then it is created and // initialized to zero. A reference to the internal value // is returned. so that the ++ operator can be applied. // If 'G' did not exist it now exist and is 1. // If 'G' had a value of 'n' it now has a value of 'n+1' 

Donc, en utilisant cette technique, il devient très facile de lire tous les caractères d’un stream et de les compter:

 map  m1; std::ifstream file("Plop"); std::istreambuf_iterator end; for(std::istreambuf_iterator loop(file); loop != end; ++loop) { ++m1[*loop]; // prefer prefix increment out of habbit } 

Vous pouvez utiliser la fonction std::map::at member, elle renvoie une référence à la valeur mappée de l’élément identifié avec la clé k.

 std::map mymap = { { 'a', 0 }, { 'b', 0 }, }; mymap.at('a') = 10; mymap.at('b') = 20; 

Vous pouvez aussi faire comme ça-

  std::map::iterator it = m.find('c'); if (it != m.end()) (*it).second = 42;