iterator_property_map<RandomAccessIterator, OffsetMap, T, R>
このプロパティマップは、Lvalue Property Map(左辺値プロパティマップ)をランダムアクセスイテレータに変換するアダプタである。OffsetMap型はキーオブジェクトを整数型に変換する責任を果たす。この整数は、オフセットとして、ランダムアクセスイテレータとともに用いられる。
// グラフ内のすべての稜に対するキャパシティとフローを印刷する template <class Graph, class CapacityPMap, class FlowPMap> void print_network(Graph& G, CapacityPMap capacity, FlowPMap flow) { typedef typename boost::graph_traits<Graph>::vertex_iterator Viter; typedef typename boost::graph_traits<Graph>::out_edge_iterator OutEdgeIter; typedef typename boost::graph_traits<Graph>::in_edge_iterator InEdgeIter; Viter ui, uiend; for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui) { OutEdgeIter out, out_end; std::cout << *ui << "\t"; for(boost::tie(out, out_end) = out_edges(*ui, G); out != out_end; ++out) std::cout << "--(" << get(capacity, *out) << ", " << get(flow, *out) << ")--> " << target(*out,G) << "\t"; std::cout << std::endl << "\t"; InEdgeIter in, in_end; for(boost::tie(in, in_end) = in_edges(*ui, G); in != in_end; ++in) std::cout << "<--(" << get(capacity, *in) << "," << get(flow, *in) << ")-- " << source(*in,G) << "\t"; std::cout << std::endl; } } int main(int, char*[]) { typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, boost::no_plugin, boost::plugin<boost::id_tag, std::size_t> > Graph; const int num_vertices = 9; Graph G(num_vertices); int capacity[] = { 10, 20, 20, 20, 40, 40, 20, 20, 20, 10 }; int flow[] = { 8, 12, 12, 12, 12, 12, 16, 16, 16, 8 }; // add edges to the graph, and assign each edge an ID number // to index into the property arrays add_edge(G, 0, 1, 0); // ... typedef boost::graph_traits<Graph>::edge_descriptor Edge; typedef boost::property_map<Graph, boost::id_tag>::type EdgeID_PMap; EdgeID_PMap edge_id = get(boost::edge_index(), G); boost::iterator_property_map<int*, EdgeID_PMap, int, int&> capacity_pa(capacity, edge_id), flow_pa(flow, edge_id); print_network(G, capacity_pa, flow_pa); return 0; }
Parameter | Description | Default |
---|---|---|
Iterator | Random Access Iteratorのモデルでなければいけない。 | |
OffsetMap | Readable Property Mapのモデルでなければならない。また、値型は、他のイテレータ型へと変換できなければならない。 | |
T | イテレータの値型 | std::iterator_traits<RandomAccessIterator>::value_type |
R | イテレータの参照型 | std::iterator_traits<RandomAccessIterator>::reference |
Lvalue Property Mapに要請されるメソッドと関数に加え、以下に示すメンバを持たなければならない。
property_traits<iterator_property_map>::value_typestd::iterator_traits<Iterator>::value_typeに同じ。
iterator_property_map(Iterator i)コンストラクタ。OffsetMapは、デフォルトでコンストラクトされる。
iterator_property_map(Iterator i, OffsetMap m)コンストラクタ
reference operator[](difference_type v) constプロパティをアクセスするための [ ] 演算子。reference と difference_type の型は、std::iterator_traits<Iterator>で定義される。
template <class RAIter, class OffsetMap> iterator_property_map<RAIter, OffsetMap, typename std::iterator_traits<RAIter>::value_type, typename std::iterator_traits<RAIter>::reference > make_iterator_property_map(RAIter iter, OffsetMap omap)iterator mapを簡便に生成するための関数。
template <class RAIter, class OffsetMap, class ValueType> iterator_property_map<RAIter, OffsetMap, typename std::iterator_traits<RAIter>::value_type, typename std::iterator_traits<RAIter>::reference > make_iterator_property_map(RAIter iter, OffsetMap omap, ValueType dummy_arg)コンパイラが部分特殊化をサポートしていない場合、2引数バージョンの関数ではなく、この関数を使用する。
Copyright © 2000-2002 |
Jeremy Siek,
Univ.of Notre Dame (jsiek@osl.iu.edu) Lie-Quan Lee, Univ.of Notre Dame (llee1@osl.iu.edu) Andrew Lumsdaine, Univ.of Notre Dame (lums@osl.iu.edu) |