Как распечатать содержимое вложенного std :: unordered_map? - PullRequest
2 голосов
/ 21 апреля 2020

Я пытаюсь распечатать все содержимое std::unordered_map, указанного так:

std::unordered_map<uint64_t, std::unordered_map<uint64_t,uint64_t>> m;

После добавления объектов на карту я попытался сделать следующее:

for (auto it=map.begin(); it!=map.end(); it++) {
    cout << it->first << it->second << endl;
}

но это не работает.

Ответы [ 3 ]

2 голосов
/ 21 апреля 2020

Поскольку вы вложили std::unordered_map, должно работать следующее:

for (auto const& i : m) {
    for (auto const& j : i.second) {
        std::cout << j.first << " " << j.second << std::endl;
    }
}
1 голос
/ 21 апреля 2020

Как напечатать содержимое вложенного std :: unordered_map?

Для печати вложенного std :: unordered_map используйте вложенный на основе диапазона для l oop.

for (auto const& i: m) {
    std::cout << "Key: " << i.first << " (";
    for (auto const& j: i.second)
        std::cout << j.first << " " << j.second;
    std::cout << " )" << std::endl;
}

Однако, если вы хотите изменить элементы контейнера:

for (const& i: m) {
        for (const& j: i.second)
            // Do operations
}
1 голос
/ 21 апреля 2020

Вы должны перебрать и вложенную карту. И когда вы работаете с картами, очень удобно использовать диапазон на основе поверх структурированной привязки. Чтобы избежать этих крипт c first и second вещей:

for (const auto& [key1, value1] : map)
    for (const auto& [key2, value2] : value1)
        std::cout << key2 << " " << value2 << std::endl;

Хотя это работает только в C ++ 17. Если вы не можете использовать его, то у вас есть ответ от NutCracker.

...