Я уверен, что вы знаете, что в std::vector<X>
магазине хранится целая куча X
предметов, верно? Но если у вас есть std::map<X, Y>
, то, что он на самом деле хранит, это целая куча std::pair<const X, Y>
с. Это именно то, что карта - она соединяет вместе ключи и связанные значения.
Когда вы итерируете по a std::map
, вы повторяете по всем этим std::pair
s. Когда вы разыменовываете один из этих итераторов, вы получаете std::pair
ключ, содержащий его значение.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
Здесь, если вы сейчас это сделаете *it
, вы получите std::pair
первый элемент на карте.
Теперь тип std::pair
дает вам доступ к его элементам через два члена: first
и second
. Так что если у вас есть std::pair<X, Y>
вызываемый p
, p.first
является X
объектом и p.second
является Y
объектом.
Итак, теперь вы знаете, что разыменование std::map
итератора дает вам std::pair
, тогда вы можете получить доступ к его элементам с помощью first
и second
. Например, (*it).first
даст вам ключ и (*it).second
даст вам значение. Это эквивалентно it->first
и it->second
.
std::map
хранит ключ и значение .map::iterator.second
относится к стоимости .