C++ Boost

iterator_property_map<RandomAccessIterator, OffsetMap, T, R>

該 property map 是一個適配器,將任意隨機訪問迭代器轉換為一個 左值 Property Map. The 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 };

// 添加邊到圖中,並為每條邊賦一個ID數,用於在屬性數組中的索引
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;
}

定義於

boost/property_map.hpp

Model Of

左值 Property Map

模板參數

參數 描述 缺省
Iterator 必須符合 隨機訪問迭代器  
OffsetMap 必須符合 可讀 Property Map 且值類型必須可轉換為迭代器的距離類型  
T 迭代器的值類型 std::iterator_traits<RandomAccessIterator>::value_type
R 迭代器的引用類型 std::iterator_traits<RandomAccessIterator>::reference

成員

除了 左值 Property Map 中要求的方法和函數以外,該類還有以下成員。


property_traits<iterator_property_map>::value_type
std::iterator_traits<Iterator>::value_type 相同的類型。
iterator_property_map(Iterator i)
構造函數。OffsetMap 為缺省構造。
iterator_property_map(Iterator i, OffsetMap m)
構造函數。
reference operator[](difference_type v) const
[]操作符用於訪問屬性。referencedifference_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)
如果你的編譯器不支持偏特化(如 Visual C++),請用這個函數替代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)