Jestem pewien, że wiesz, że w jednym std::vector<X>
sklepie znajduje się cała masa X
przedmiotó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::pair
zawierają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::pair
pierwszy element na mapie.
Teraz typ std::pair
zapewnia dostęp do swoich elementów za pośrednictwem dwóch elementów: first
i second
. Więc jeśli masz std::pair<X, Y>
wywołane p
, p.first
jest X
obiektem i p.second
jest Y
obiektem.
Więc teraz wiesz, że wyłuskiwanie std::map
odwołań daje iterator std::pair
, możesz wtedy uzyskać dostęp do jego elementów za pomocą first
i second
. Na przykład (*it).first
da ci klucz i (*it).second
poda wartość. Są one równoważne it->first
i it->second
.
std::map
przechowuje klucz i wartość .map::iterator.second
odnosi się do wartości .