仮に、深さ優先探索で、各頂点の発見/呼び出しの前後関係を、括弧を使った構造で出力したいとする。これを達成するには、 BGL アルゴリズム depth_first_search() と 2 つのイベントビジタを使えばよい。以下の例の完全なソースコードは examples/dfs_parenthesis.cpp に有る。まず、 2 つのイベントビジタを定義する。使うイベントビジタとして、 DFSVisitor に詳述されたイベントのリストの中から on_discover_vertex と on_finish_vertex を選ぶ。
struct open_paren : public base_visitor<open_paren> { typedef on_discover_vertex event_filter; template <class Vertex, class Graph> void operator()(Vertex v, Graph& G) { std::cout << "(" << v; } }; struct close_paren : public base_visitor<close_paren> { typedef on_finish_vertex event_filter; template <class Vertex, class Graph> void operator()(Vertex v, Graph& G) { std::cout << v << ")"; } };次に 2 つのイベントビジタオブジェクトを作り、 std::make_pair で作られる std::pair を使って、この 2 つから EventVisitorList を作る。
std::make_pair(open_paren(), close_paren())次にこのリストを depth_first_search() に渡したい所だが、 depth_first_search() が求めているのは DFSVisitor であって、 EventVisitorList ではない。そこで EventVisitor のリストを DFSVisitor に変換するアダプタ、 dfs_visitor を使う。他のビジタアダプタ同様、 dfs_visitor には make_dfs_visitor() という作成関数が有る。
make_dfs_visitor(std::make_pair(open_paren(), close_paren()))さあこれで、以下のように、生成されたビジタオブジェクトを depth_first_search() に渡す事ができる。
// グラフオブジェクト G を作る... std::vector<default_color_type> color(num_vertices(G)); depth_first_search(G, make_dfs_visitor(std::make_pair(open_paren(), close_paren())), color.begin());3 つ以上のイベントビジタのリストを作りたければ、以下のように std::make_pair をネストして呼び出せばいい。
std::make_pair(visitor1, std::make_pair(visitor2, ... std::make_pair(visitorN-1, visitorN)...));
Copyright © 2000-2001 |
Jeremy Siek,
Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee@cs.indiana.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu) |
Japanese Translation Copyright © 2003 Hiroshi Ichikawa
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。
このドキュメントの対象: Boost Version 1.29.0
最新版ドキュメント (英語)