Jestem pewien, że wiesz, że std::vector<X>
przechowuje całą masę obiektów X
, prawda? Ale jeśli masz std::map<X, Y>
, to, co faktycznie przechowuje, to cała masa std::pair<const X, Y>
s. Tak właśnie jest mapa - łączy w pary klucze i powiązane wartości.
Podczas wykonywania powtórzenia testu std::map
następuje iterowanie po wszystkich tych std::pair
s. Po usunięciu któregoś z tych iteratorów otrzymuje się std::pair
zawierający klucz i powiązaną z nim wartość.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
Tutaj, jeśli teraz zrobić *it
, dostaniesz się std::pair
dla pierwszego elementu na mapie.
Teraz typ std::pair
daje dostęp do jego elementów przez dwóch członków: first
i second
. Więc jeśli masz std::pair<X, Y>
o nazwie p
, p.first
jest obiektem o numerze X
i p.second
jest obiektem .
Więc teraz wiesz, że dereferencing się std::map
iterator daje std::pair
, można następnie uzyskać dostęp do jego elementów z first
i second
. Na przykład (*it).first
poda ci klucz, a (*it).second
poda ci wartość. Są to odpowiedniki it->first
i it->second
.
"Std :: map" przechowuje * klucz * i * wartość *. "Mapowanie :: iterator.second" odnosi się do * wartości *. –
@AlokSave: Dzięki. Twój komentarz uratował wielu czytelników od przeczytania dwóch odpowiedzi, które, ewidentnie, mogły zostać skrócone do długości tweeta. – displayName