【发布时间】:2015-04-21 22:52:20
【问题描述】:
将捆绑属性与 Boost 图形库一起使用意味着创建代码以输出与 graphviz 兼容的点文件非常简单:
#include <boost/graph/graphviz.hpp>
struct Edge { int i; };
int main()
{
using namespace boost;
typedef adjacency_list<vecS, vecS, directedS, no_property, Edge> Graph;
Graph g;
add_edge(0, 1, {123}, g);
write_graphviz(std::cout, g, default_writer(),
make_label_writer(boost::get(&Edge::i,g)));
return 0;
}
在上面的代码中,边缘属性是使用名为Edge 的结构定义的。这个结构只包含一个int; boost::get 然后为make_label_writer 提供必要的PropertyWriter。
如果我想使用基本类型(例如int 或double)作为边缘属性,那么我现在需要传递给make_label_writer 的参数是什么?代码是否可以与上述代码保持可比性。例如,adjacency_list 可以声明为:
typedef adjacency_list<vecS, vecS, directedS, no_property, int> Graph;
【问题讨论】:
-
代码不应该编译,因为
edge是模棱两可的。修复了您的代码
标签: c++ boost graphviz boost-graph