使用Boost Graph Library的捆绑属性意味着创建代码以输出与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属性是使用名为 Edge
的结构定义的 . 这个结构只包含一个 int
; boost::get
然后为 make_label_writer
提供必要的 PropertyWriter
.
如果我想改为使用基本类型(例如 int
或 double
)作为edge属性,那么我现在需要传递给 make_label_writer
的参数是什么?代码可以保持与上面的代码相当 . 例如, adjacency_list
可以声明为:
typedef adjacency_list<vecS, vecS, directedS, no_property, int> Graph;
1 回答
您将直接寻址边缘包 .
Live On Coliru
输出: