基本介紹
- 中文名:無序關聯容器
- 外文名:unordered associative containers
- 性質:數據結構
- 領域:計算機
歷史,定製哈希函式,標準模板庫,散列表,
歷史
SGI的STL提供了hash_map,hash_set,hash_multimap,hash_multiset等類模板。由於其有用性,很快其它的C++編譯器也支持了這一特性,如GCC、libstdc++以及MSVC(在stdext命名空間)。
C++ TR1語言標準中提出了增加hash_*類模板,最終接受為unordered_*。Boost C++ Libraries也提供了一種實現。
定製哈希函式
定製的哈希函式的參數為到定製類型的const引用,返回類型為size_t。
struct X{int i,j,k;};struct hash_X{ size_t operator()(const X &x) const{ return hash<int>()(x.i) ^ hash<int>()(x.j) ^ hash<int>()(x.k); }};
定製哈希函式作為std::unordered_map的模板參數使用。
std::unordered_map<X,int,hash_X> my_map;
或者通過特化std::hash來使用。
namespace std { template <> class hash<X>{ public : size_t operator()(const X &x ) const{ return hash<int>()(x.i) ^ hash<int>()(x.j) ^ hash<int>()(x.k); } };}//... std::unordered_map<X,int> my_map;
標準模板庫
標準模板庫(英文:Standard Template Library,縮寫:STL),是一個C++軟體庫,大量影響了C++標準程式庫但並非是其的一部分。其中包含4個組件,分別為算法、容器、函式、疊代器。