En C ++, ¿cuál es el tipo de a std::map<>::iterator?
Sabemos que un objeto itde tipo std::map<A,B>::iteratortiene una sobrecarga operator ->que devuelve un std::pair<A,B>*, y que std::pair<>tiene un miembro firsty second.
Pero, ¿a qué corresponden estos dos miembros y por qué tenemos que acceder al valor almacenado en el mapa como it->second?

std::mapalmacena una clave y un valor .map::iterator.secondse refiere a la valor .Respuestas:
Estoy seguro de que sabes que un
std::vector<X>almacena un montón deXobjetos, ¿verdad? Pero si tienes unstd::map<X, Y>, lo que realmente almacena es un montón destd::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 estosstd::pairs. Cuando desreferencia uno de estos iteradores, obtiene un questd::paircontiene la clave y su valor asociado.Aquí, si ahora lo haces
*it, obtendrásstd::pairel primer elemento del mapa.Ahora el tipo
std::pairle da acceso a sus elementos a través de dos miembros:firstysecond. Entonces, si tiene unastd::pair<X, Y>llamadap,p.firstes unXobjeto yp.secondes unYobjeto.Entonces, ahora que sabe que desreferenciar un
std::mapiterador le da unstd::pair, puede acceder a sus elementos confirstysecond. Por ejemplo,(*it).firstle dará la clave y(*it).secondle dará el valor. Estos son equivalentes ait->firstyit->second.fuente
operator[]tiene que devolver un tipo específico, sinofirst, ysecondpuede tener diferentes tipos. Por otro lado,std::tupletiene una función auxiliar especialstd::getpara acceder a sus elementos por índice.El tipo de elementos de una
std::map(que también es el tipo de una expresión obtenida al desreferenciar un iterador de ese mapa) cuya clave esKy valorVesstd::pair<const K, V>- la clave esconstpara evitar que interfiera con la clasificación interna de los valores del mapa.std::pair<>tiene dos miembros nombradosfirstysecond(ver aquí ), con un significado bastante intuitivo. Por lo tanto, dado un iteradoria cierto mapa, la expresión:Lo que es equivalente a:
Se refiere al primer
constelemento ( ) depairobjeto señalado por el iterador, es decir, se refiere a una clave en el mapa. En cambio, la expresión:Lo que es equivalente a:
Se refiere al segundo elemento de
pair- es decir, al valor correspondiente en el mapa.fuente