Je suis sûr que vous savez qu'un std::vector<X>
stocke tout un tas d' X
objets, non? Mais si vous avez un std::map<X, Y>
, ce qu'il stocke en fait est un tas de std::pair<const X, Y>
s. C'est exactement ce qu'est une carte - elle associe les clés et les valeurs associées.
Lorsque vous itérez sur a std::map
, vous itérez sur tous ces std::pair
s. Lorsque vous déréférencer l'un de ces itérateurs, vous obtenez un std::pair
contenant la clé et sa valeur associée.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
Ici, si vous le faites maintenant *it
, vous obtiendrez le std::pair
pour le premier élément de la carte.
Désormais, le type std::pair
vous donne accès à ses éléments via deux membres: first
et second
. Donc, si vous avez un std::pair<X, Y>
appelé p
, p.first
est un X
objet et p.second
est un Y
objet.
Alors maintenant vous savez que déréférencer un std::map
itérateur vous donne un std::pair
, vous pouvez alors accéder à ses éléments avec first
et second
. Par exemple, (*it).first
vous donnera la clé et (*it).second
vous donnera la valeur. Ceux-ci sont équivalents à it->first
et it->second
.
std::map
stocke une clé et une valeur .map::iterator.second
fait référence à la valeur .