2014-01-21 28 views
0

我希望是否有任何其他方式使用boost :: filtered_graph()没有print_edges()或print_graph()函数。使用boost filtered_graph没有print_graph()

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

我也明白,谓词作用于图中的每一个节点或边缘上时,得到它打印到std ::法院

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

回答

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是否是此代码将工作一个filtered_graph或adjacency_list或任何其他BGL图形类型。

+0

同意,但它会为我用于filtered_graph的谓词起作用吗?例如,fg(G,edge_predicate) - > fg是用边谓词在G上过滤的图。现在,我该如何使用BGL_FORALL_XX()? ..我的边缘谓词将输入作为图形中的边缘并修改其属性。当打印图形被调用时,它会通过每条边并在每条边上调用谓词。我怎么知道这个使用BGL_FORALL_xxx? – Pogo

+0

当然。它适用于任何BGL图形类型。 –