Je suis sûr que vous le savez, std::vector<X>
magasins tout un tas d' X
objets, droit? Mais si vous avez un std::map<X, Y>
, ce qu'il stocke en fait est tout un tas d' std::pair<const X, Y>
s. C'est exactement ce qu'une carte est - il des paires ensemble les clés et les valeurs associées.
Lorsque vous parcourez un std::map
, vous êtes une itération sur l'ensemble de ces std::pair
s. Lorsque vous déréférencer 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, maintenant, si vous n' *it
, vous obtiendrez la de la std::pair
pour le premier élément de la carte.
Or, le type std::pair
vous donne accès à ses éléments par le biais de deux membres: first
et second
. Donc, si vous avez un std::pair<X, Y>
appelés p
, p.first
est X
objet et p.second
est Y
objet.
Alors maintenant, vous savez que la référence à un std::map
itérateur vous donne un std::pair
, vous pouvez ensuite accéder à ses éléments avec des first
et second
. Par exemple, (*it).first
va vous donner la clé, et (*it).second
vous donnera la valeur. Ce sont les équivalents it->first
et it->second
.