Как считать лист, который находится в словаре?

#include <iostream>
#include <vector>
#include <map>
#include <list>
using namespace std;
int main()
{

    list<int> my_list;
    map<int, list<int> > graph;
    for (int count=0; count < 5; count++)
        my_list.push_back(count);
    graph[0] = my_list;
    for(int i = 0; i < graph.size(); i++)
    {
        
    }
}

Ответы (1 шт):

Автор решения: Silver

Для того чтобы считать список, нужно сначала обратиться к контейнеру map. Чтоб работать с контейнером map, мы должны итератору передать начало контейнера map, то есть graph.begin(). Чтоб обратиться к списку, нужно обратиться ко второму полю контейнера map, а контейнер map как мы выяснили, это у нас итератор который указывает на тип map, поэтому мы к полю должны обратиться таким способом graph.begin()->second. Но это не всё, таким способом мы получили только сам список, а нам нужно значение из списка. Поэтому мы также должны завести итератор для списка, передать начало списка graph.begin()->second.begin() и с помощью оператора разыменования через цикл получить все значения. В результат получается такой код на основе твоего:

#include <iostream>
#include <iostream>
#include <vector>
#include <map>
#include <list>

using namespace std;
int main()
{

    list<int> my_list;
    list<int> my_list2;
    map<int, list<int> > graph;
    for (int count=0; count < 5; count++) {
        my_list.push_back(count);
        my_list2.push_back(count+1);
        
    }

    graph[0] = my_list;
    graph[1] = my_list2;
    
    

    auto itGraph = graph.begin(); // auto == std::map<int, list<int> >::iterator 
     

    for(; itGraph != graph.end(); itGraph++) {
        auto itList = itGraph->second.begin(); // auto == std::list<int>::iterator 
        for(; itList != itGraph->second.end(); itList++) {
            cout << *itList << " ";
        }
        cout << endl;
    }
}
→ Ссылка