Как einpoklum , упомянутый в их ответ , так как C ++ 17 , вы также можете использовать объявления структурированной привязки . Я хочу расширить это, предоставляя полное решение для итерации по карте карт удобным способом:
int main() {
std::map<std::string, std::map<std::string, std::string>> m {
{"name1", {{"value1", "data1"}, {"value2", "data2"}}},
{"name2", {{"value1", "data1"}, {"value2", "data2"}}},
{"name3", {{"value1", "data1"}, {"value2", "data2"}}}
};
for (const auto& [k1, v1] : m)
for (const auto& [k2, v2] : v1)
std::cout << "m[" << k1 << "][" << k2 << "]=" << v2 << std::endl;
return 0;
}
Примечание 1: Для заполнения карты я использовал список инициализатора (который является C ++ 11 функцией). Иногда это может быть удобно для компактности фиксированных инициализаций.
Примечание 2: Если вы хотите изменить карту m
внутри циклов, вам нужно удалить ключевые слова const
.
Код на Coliru