gpt4 book ai didi

c++ - Boost Graph Library:std::list 作为 VertexList 模板参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:38 25 4
gpt4 key购买 nike

我正在尝试构建一个图,其顶点存储在 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;
}

使用 gcc-4.7.3 编译时出现以下错误:

/Users/matteo/Documents/workspace/graph-gravity-dec/src/test.cpp: In function 'int main()':
/Users/matteo/Documents/workspace/graph-gravity-dec/src/test.cpp:12:17: error: invalid conversion from 'int' to 'boost::detail::adj_list_gen<boost::adjacency_list<boost::listS, boost::listS>, boost::listS, boost::listS, boost::directedS, boost::no_property, boost::no_property, boost::no_property, boost::listS>::config::vertex_descriptor {aka void*}' [-fpermissive]
In file included from /opt/local/include/boost/graph/adjacency_list.hpp:246:0,
from /Users/matteo/Documents/workspace/graph-gravity-dec/src/test.cpp:2:
/opt/local/include/boost/graph/detail/adjacency_list.hpp:681:5: error: initializing argument 2 of 'std::pair<typename Config::edge_descriptor, bool> boost::add_edge(typename Config::vertex_descriptor, typename Config::vertex_descriptor, boost::directed_graph_helper<Config>&) [with Config = boost::detail::adj_list_gen<boost::adjacency_list<boost::listS, boost::listS>, boost::listS, boost::listS, boost::directedS, boost::no_property, boost::no_property, boost::no_property, boost::listS>::config; typename Config::edge_descriptor = boost::detail::edge_desc_impl<boost::directed_tag, void*>; typename Config::vertex_descriptor = void*]' [-fpermissive]

这似乎是在提示从 intvoid* 的无效转换。

但是,如果我将 listS 更改为 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;
}

我错过了什么?顶点的容器不是应该可以互换而无需进一步修改其余代码吗?

最佳答案

正如人们所说,您不能对列表支持图中的节点使用 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);

你需要创建一个顶点来添加。this question 中有一些有用的代码

关于c++ - Boost Graph Library:std::list 作为 VertexList 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16833560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com