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