小编Fal*_*ner的帖子

使用基于范围的for迭代图的边缘

我有一个图表的表示std::vector<std::unordered_set<unsigned>> neighbors,即顶点是整数,并且对于每个顶点,我们保留一组它的邻居.因此,为了走遍所有的边缘,我会做类似的事情

for (unsigned u = 0; u < neighbors.size(); ++u)
    for (unsigned v : neighbors[u])
        if (u <= v)
            std::cout << u << ' ' << v << std::endl;
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够从中获得同样的效果

for (auto e: g.edges())
    std::cout << e.first << ' ' << e.second << std::endl;
Run Code Online (Sandbox Code Playgroud)

其中g是从类包封neighbors矢量.

但是,我尝试过的所有东西看起来都非常复杂,我能想到的最好的版本有50行,而且很难看出它是正确的.有一个简单的方法吗?

这是我丑陋的版本:

#include <iostream>
#include <unordered_set>
#include <vector>
typedef unsigned Vertex;
class Graph {
public:
    typedef std::unordered_set<Vertex> Neighbors;
    std::size_t numVertices() const { return neighbors_.size(); }
    Graph(std::size_t n = …
Run Code Online (Sandbox Code Playgroud)

c++ foreach graph boost-graph c++11

11
推荐指数
2
解决办法
6077
查看次数

标签 统计

boost-graph ×1

c++ ×1

c++11 ×1

foreach ×1

graph ×1