使用基本类型标记的增强图边缘的简单点输出

Simple dot output for Boost Graph edges labelled with basic types

本文关键字:增强 边缘 简单 输出 类型      更新时间:2023-10-16

将捆绑属性与 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 属性是使用名为 Edge 的结构定义的。此结构仅包含一个int; 然后boost::get make_label_writer提供必要的PropertyWriter

如果我想对 edge 属性使用基本类型,例如 intdouble,我现在需要传递给 make_label_writer 的参数是什么?代码能否与上述代码保持可比性。例如,adjacency_list可以声明为:

typedef adjacency_list<vecS, vecS, directedS, no_property, int> Graph;

您将直接处理边缘捆绑包。

对于捆绑属性,指向成员属性标记隐式应用于edge_bundle_t属性的值(或vertex_bundle_tgraph_bundle_t视情况而定;因此,您不希望对边/顶点/图形束使用相同的用户定义类型)。

住在科里鲁

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
int main()
{
    using namespace boost;
    typedef adjacency_list<vecS, vecS, directedS, no_property, int> Graph;
    Graph g;
    add_edge(0, 1, 123, g);
    write_graphviz(std::cout, g, default_writer(), 
            make_label_writer(boost::get(edge_bundle,g)));
}

输出:

digraph G {
0;
1;
0->1 [label=123];
}