template<typename T, typename IndexMap = identity_property_map>
class vector_property_map;
該 property map 用於高效地保存具有可變數量元素的屬性。它處於 associative_property_map 和 iterator_property_map 之間。後者的速度更快,但要求在創建 property map 時就知道要保存的元素的數量。前者沒有這個要求,但會慢一些,且要求保存的元素是可比較的。
vector_property_map 使用從鍵對索引的映射,並允許添加新元素。它將值保存在可以按需調整大小的 vector 中。
注意,vector_property_map 不提供所存值的引用/指針穩定性。
#include <boost/vector_property_map.hpp>
#include <string>
#include <iostream>
int main()
{
boost::vector_property_map<std::string> m;
// 賦一個字符串給 '4'.
m[4] = "e";
std::cout << "'" << m[4] << "'\n";
// 從 '10' 中讀取字符串。由於沒有這樣的關聯,將會返回 ""
std::cout << "'" << m[10] << "'\n";
}
| 參數 | 描述 | 缺省值 |
|---|---|---|
| T | 屬性值的類型。必須同時符合 可賦值 和 可缺省構造 | |
| IndexMap | 必須符合 可讀 Property Map 且值類型必須可轉換為 std::vector<T>::size_type. | identity_property_map |
除了 左值 Property Map 中要求的方法和函數以外,該類還有以下成員。
vector_property_map(const IndexMap& index = IndexMap())接受一個索引 map 的構造函數。
vector_property_map(unsigned initial_size, const IndexMap& index = IndexMap())這個版本的構造函數允許指定要保存的元素的最大索引。正確的數量可以提高性能,不過語義是一樣的。
vector_property_map(const vector_property_map&)複製構造函數。拷貝將共享同一份數據,對它的修改會影響到原來的 property map.
vector_property_map& operator=(const vector_property_map&)賦值操作符。語義與複製構造函數相同。
reference operator[](const key_type& v) const[]操作符提供屬性訪問。
std::vector<T>::iterator storage_begin()
std::vector<T>::iterator storage_end()
std::vector<T>::const_iterator storage_begin()
std::vector<T>::const_iterator storage_end()
這組方法用於訪問底層 vector 的 begin 和 end 迭代器。
基本原理:這些方法是易用的,例如當你需要為一個剛創建的 property map 中的所有元素指定單個值時。這些方法沒有被命名為簡單的 "begin" 和 "end" 的原因是,vector_property_map 是一個無界 map, 沒有 end 迭代器。不提供直接訪問底層的方法,由於這樣會出降低封裝度和帶來以後的性能調整的危險。
鳴謝:Matthias Troyer 建議增加這些函數。
void reserve(unsigned size)保留空間以保存最大數量為 'size' 的元素。除非以更大的索引來訪問元素,否則所有訪問都是 O(1) 時間的。
template用於創建一個 vector property map 的工具函數。vector_property_map make_vector_property_map(IndexMap index) { return vector_property_map (index);
}
| Copyright © 2002 |
Jeremy Siek,
Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee1@osl.iu.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu) |
| Copyright © 2003 | Vladimir Prus |