在未排序集的向量上迭代 我还在学习C++,不明白我今天遇到的一件事。< /P>

在未排序集的向量上迭代 我还在学习C++,不明白我今天遇到的一件事。< /P>,c++,vector,C++,Vector,我看到一个邻接列表如果由 std::vector bla::blaa::邻接列表 我相信它是一个无序集的向量 我想知道: 这个数据结构是什么,无序集的向量 如何遍历它以获得邻接列表,请提供一个用于遍历此类数据结构的通用MWE 提前谢谢你教我这个新东西 最低限度(非)工作示例: #include <iostream> #include <vector> #include <unordered_set> using namespace std; int mai

我看到一个邻接列表如果由

std::vector bla::blaa::邻接列表

我相信它是一个无序集的向量

我想知道:

  • 这个数据结构是什么,无序集的向量
  • 如何遍历它以获得邻接列表,请提供一个用于遍历此类数据结构的通用MWE
  • 提前谢谢你教我这个新东西

    最低限度(非)工作示例:

    #include <iostream>
    #include <vector>
    #include <unordered_set>
    
    using namespace std;
    
    int main()
    {
        vector<unordered_set<int> > my_sets;
    
        for (int i=0; i<5; i++){
            my_sets[i].insert(i*2);
        }
    
        for(int i=0;i<my_sets.size();i++)
        {
              for(unordered_set<int> :: iterator it = my_sets[i].begin(); it != my_sets[i].end();++it)
            {
               cout << *it;
            }
        }
        return 0;
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    向量my_集;
    
    对于(int i=0;i您的代码中有一个问题,您的向量是空的,但是您试图访问从0到4的索引。在迭代之前,您应该首先设置向量的大小。此外,您还可以使用基于范围的for循环,以避免编写大量索引

    此代码是正确的,我认为它符合您的要求:

    #include <iostream>
    #include <vector>
    #include <unordered_set>
    
    using namespace std;
    
    int main()
    {
        vector<unordered_set<int>> my_sets(5);
        //                                ^^^
        // number 5 here initializes the vector with the size of 5 
    
        for (int i = 0; i < 5; i++)
            my_sets[i].insert(i*2);
    
        for (auto &my_set : my_sets)
            for (auto num : my_set)
                cout << num;
    
        return 0;
    } 
    
    一个

    是无序列表的集合。每个列表描述一组邻居

    翻译成C++:

    std::vector<std::unordered_set<int> > adjlist;
    


    如果要从一个节点导航到另一个节点,必须查看节点的邻居

    std::vector<std::unordered_set<int> > adjlist = {{2, 5}, {2, 3}, {0, 1}, {1, 4}, {3}, {0}};
    
    for (int i = 0; i < adjlist.size(); ++i) {
        auto &neighbours = adjlist[i];
        for (auto n : neighbours) {
            std::cout << i << "->" << n << '\n';
        }
    }
    
    std::vector adjlist={{2,5},{2,3},{0,1},{1,4},{3},{0};
    对于(int i=0;istd::cout-read?这里是另一个@OlafDietsche:tx,但我知道邻接列表是什么。我的问题与迭代这种数据结构有关。
    
    for (int node = 0; node < adjlist.size(); ++node) {
        // do something with node
    }
    
    for (auto &neighbours : adjlist) {
        // do something with each node's neighbours
    }
    
    std::vector<std::unordered_set<int> > adjlist = {{2, 5}, {2, 3}, {0, 1}, {1, 4}, {3}, {0}};
    
    for (int i = 0; i < adjlist.size(); ++i) {
        auto &neighbours = adjlist[i];
        for (auto n : neighbours) {
            std::cout << i << "->" << n << '\n';
        }
    }