C++ Boost图形库:std::list as VertexList模板参数

C++ Boost图形库:std::list as VertexList模板参数,c++,list,boost,vector,boost-graph,C++,List,Boost,Vector,Boost Graph,我试图用存储在std::list而不是std::vector中的顶点构建一个图 然而,我被一个编译错误弄糊涂了。我使用的最小代码是 #include <boost/graph/adjacency_list.hpp> using namespace boost; int main() { typedef adjacency_list< listS,listS > Graph; Graph g; add_edge(0,1,g); return 0;

我试图用存储在
std::list
而不是
std::vector
中的顶点构建一个图

然而,我被一个编译错误弄糊涂了。我使用的最小代码是

#include <boost/graph/adjacency_list.hpp>

using namespace boost;

int main() {

  typedef adjacency_list< listS,listS > Graph;

  Graph g;

  add_edge(0,1,g);

  return 0;
}
这似乎在抱怨从
int
void*
的转换无效

但是,如果我将
列表
更改为
vecS
一切正常

#include <boost/graph/adjacency_list.hpp>

using namespace boost;

int main() {

  typedef adjacency_list< listS, vecS > Graph;

  Graph g;

  add_edge(0,1,g);

  return 0;
}
#包括
使用名称空间boost;
int main(){
typedef邻接列表<列表,向量>图形;
图g;
添加_边(0,1,g);
返回0;
}

我错过了什么?如果不进一步修改代码的其余部分,顶点容器不应该是可互换的吗?

正如人们所说,在列表支持的图中,不能使用0或1作为节点。但这将起作用:

typedef adjacency_list< listS,listS > Graph;
Graph g;
typedef boost::graph_traits < Graph >::vertex_descriptor Vertex;
Vertex v0 = boost::add_vertex(g);
Vertex v1 = boost::add_vertex(g);
boost::add_edge(v0, v1, g);
typedef邻接列表图形;
图g;
typedef boost::graph_traits::顶点描述符顶点;
顶点v0=boost::添加顶点(g);
顶点v1=boost::添加顶点(g);
增压:添加_边缘(v0、v1、g);
您需要创建一个要添加的顶点。

中有一些有用的代码,正如人们所说,在列表支持的图中,不能将0或1用于节点。但这将起作用:

typedef adjacency_list< listS,listS > Graph;
Graph g;
typedef boost::graph_traits < Graph >::vertex_descriptor Vertex;
Vertex v0 = boost::add_vertex(g);
Vertex v1 = boost::add_vertex(g);
boost::add_edge(v0, v1, g);
typedef邻接列表图形;
图g;
typedef boost::graph_traits::顶点描述符顶点;
顶点v0=boost::添加顶点(g);
顶点v1=boost::添加顶点(g);
增压:添加_边缘(v0、v1、g);
您需要创建一个要添加的顶点。

中有一些有用的代码位,我认为它们没有什么可互换的理由:
vector
是随机访问,而
list
不是。可能有一个非随机访问接口,允许您填充边,或者库需要随机访问…如果您使用
列表
作为顶点列表,则无法通过索引将顶点传递到
添加边
。我看不出它们可互换的理由:
向量
是随机访问,而
列表
不是。可能存在允许您填充边的非随机访问接口,或者库需要随机访问…如果您使用
列表
作为顶点列表,则无法通过索引将顶点传递到
添加边