2014-01-21 61 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圖形類型。 –