我有一个图表的表示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)