我希望是否还有其他方法可以使用boost :: filtered_graph()而不使用print_edges()或print_graph()函数。
在链接here中,似乎只有在调用打印图形或打印边缘功能时,过滤器才能在每个节点上工作。
我确实了解谓词在打印到std :: cout时会作用在图的每个节点或边上
还有其他方法可以使用吗?我可以使用for_each(begin_iter,end_iter)还是类似的东西?请提出建议。
最佳答案
您可以在定义大量迭代器宏的地方使用#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是filtered_graph还是adjacency_list或任何其他BGL图形类型,此代码都将起作用。
关于c++ - 使用不带print_graph()的boost filter_graph,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21263667/