Boost Graph Library Undirected Graph没有并行边缘强制执行

mig*_*ais 4 c++ boost

我正在使用Boost Graph Library来处理无向图,并声明了我的图

typedef property<vertex_index_t, int, property<vertex_name_t, string> > VertexProperty;
typedef adjacency_list<vecS, setS, undirectedS, VertexProperty > UndirectedGraph; 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,OutEdgeList的类型为std :: set,我之所以选择它,是因为文档说这种类型会强制缺少并行边.

现在,我的程序读取一个文本文件,指示节点之间的边缘,如果以前没有看到则创建节点,并在它们之间添加边缘.

我最近运行了大量数据的代码,发现了奇怪的结果.几个小时后,我发现一些用户的度数比图中顶点的数量多,所以我尝试了一个简单的文本文件代码,该文件只描述了同一对节点之间的两条边,但是反向源,目标,这样boost将执行以下操作:

add_edge(A,B)
add_edge(B,A)
Run Code Online (Sandbox Code Playgroud)

并注意到Boost最终增加了两个边缘.out_degree为它们返回2.

现在,问题是:我做错了吗?对于具有setS作为OutEdgeList类型的无向图,add_edge(a,b)是否应该与add_edge(b,a)相同?

谢谢.;)

mig*_*ais 5

问题是OutEdgeList是第一个模板参数,而不是第二个,所以我实际上使用的是vecS而不是setS.