Я впевнений, ви знаєте, що в std::vector<X>магазині зберігається ціла купа Xпредметів, правда? Але якщо у вас є std::map<X, Y>, те, що він насправді зберігає, - це ціла купа std::pair<const X, Y>s. Саме це і є карта - вона з'єднує ключі та пов'язані з ними значення.
Коли ви повторюєте значення a std::map, ви повторюєте всі ці std::pairs. Коли ви відмежуєте один із цих ітераторів, ви отримуєте 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відноситься до значення .