Jestem pewien, że wiesz, że w jednym std::vector<X>sklepie znajduje się cała masa Xprzedmiotów, prawda? Ale jeśli masz std::map<X, Y>, to, co faktycznie przechowuje, to cała masa std::pair<const X, Y>plików. Dokładnie tym jest mapa - łączy w pary klucze i powiązane wartości.
Kiedy wykonujesz iterację po a std::map, wykonujesz iterację po wszystkich tych std::pair. Kiedy wyłuskujesz jeden z tych iteratorów, otrzymasz std::pairzawierający klucz i skojarzoną z nim wartość.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
Tutaj, jeśli teraz to zrobisz *it, otrzymasz std::pairpierwszy element na mapie.
Teraz typ std::pairzapewnia dostęp do swoich elementów za pośrednictwem dwóch elementów: firsti second. Więc jeśli masz std::pair<X, Y>wywołane p, p.firstjest Xobiektem i p.secondjest Yobiektem.
Więc teraz wiesz, że wyłuskiwanie std::mapodwołań daje iterator std::pair, możesz wtedy uzyskać dostęp do jego elementów za pomocą firsti second. Na przykład (*it).firstda ci klucz i (*it).secondpoda wartość. Są one równoważne it->firsti it->second.
std::mapprzechowuje klucz i wartość .map::iterator.secondodnosi się do wartości .