Estoy seguro de que sabes que un std::vector<X>
almacena un montón de X
objetos, ¿verdad? Pero si tienes un std::map<X, Y>
, lo que realmente almacena es un montón de std::pair<const X, Y>
s. Eso es exactamente lo que es un mapa: combina las claves y los valores asociados.
Cuando iteras sobre un std::map
, estás iterando sobre todos estos std::pair
s. Cuando desreferencia uno de estos iteradores, obtiene un que std::pair
contiene la clave y su valor asociado.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
Aquí, si ahora lo haces *it
, obtendrás std::pair
el primer elemento del mapa.
Ahora el tipo std::pair
le da acceso a sus elementos a través de dos miembros: first
y second
. Entonces, si tiene una std::pair<X, Y>
llamada p
, p.first
es un X
objeto y p.second
es un Y
objeto.
Entonces, ahora que sabe que desreferenciar un std::map
iterador le da un std::pair
, puede acceder a sus elementos con first
y second
. Por ejemplo, (*it).first
le dará la clave y (*it).second
le dará el valor. Estos son equivalentes a it->first
y it->second
.
std::map
almacena una clave y un valor .map::iterator.second
se refiere a la valor .