使用boost filtered_graph而不使用print_graph()

时间:2014-01-21 16:24:45

标签: c++ boost graph iterator boost-graph

我希望是否有任何其他方法可以在没有print_edges()或print_graph()函数的情况下使用boost :: filtered_graph()。

在链接here中,似乎只有在调用打印图形或打印边缘函数时,过滤器才能在每个节点上工作。

我确实理解当谓词打印到std :: cout时,谓词会作用于图的每个节点或边缘

还有其他方式,我可以使用它吗?我可以使用for_each(begin_iter,end_iter)或类似的东西吗?请建议。

1 个答案:

答案 0 :(得分:1)

您可以使用#include <boost/graph/graph_utility.hpp>定义大量迭代器宏:BGL_FORALL_EDGES,BGL_FORALL_VERTICES,BGL_FORALL_OUTEDGES等。

您的典型代码可能如下所示:

BGL_FORALL_VERTICES(src, g, MyGraph_t )
{
    BGL_FORALL_OUTEDGES(src, ed, g, MyGraph_t )
    {
        MyGraph_t::vertex_descriptor tgt = target(ed, g);
        ... do something ...
    }
}

无论MyGraph_t是filter_graph还是adjacency_list或任何其他BGL图表类型,此代码都将有效。