我希望是否有任何其他方法可以在没有print_edges()或print_graph()函数的情况下使用boost :: filtered_graph()。
在链接here中,似乎只有在调用打印图形或打印边缘函数时,过滤器才能在每个节点上工作。
我确实理解当谓词打印到std :: cout时,谓词会作用于图的每个节点或边缘
还有其他方式,我可以使用它吗?我可以使用for_each(begin_iter,end_iter)或类似的东西吗?请建议。
答案 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图表类型,此代码都将有效。