STL關聯容器

2022-08-26 02:30:10 字數 1678 閱讀 5254

這裡簡單學習一下stl關聯容器,主要是map、multimap、set、multiset以及unordered_map。前四個底層實現都是利用紅黑樹實現的,查詢演算法時間複雜度為\(o(log(n))\),而unordered_map從名字上就知道是無序容器,其實現原理類似雜湊表,查詢演算法時間複雜度\(o(1)\)。

set容器是乙個儲存有序唯一元素的資料結構。不允許有重複元素。其底層實現為紅黑樹。multiset原理與set相同,不同的是允許有重複元素存在。

map對映是可以用任何型別的資料作為索引的表,不允許有重複元素,其實現原理與set類似,底層都是紅黑樹。multimap允許有重複元素存在。

template,typename _alloc = std::allocator<_key> >

class set

public:

typedef _key key_type;

typedef _key value_type; // 與map不同

typedef _compare key_compare;

typedef _compare value_compare;

typedef _alloc allocator_type;

private:

typedef typename __gnu_cxx::__alloc_traits<_alloc>::template rebind<_key>::other _key_alloc_type;

typedef _rb_tree, key_compare, _key_alloc_type> _rep_type;

_rep_type _m_t; // red-black tree representing set. 紅黑樹

typedef __gnu_cxx::__alloc_traits<_key_alloc_type> _alloc_traits;

#if __cplusplus > 201402l

using node_type = typename _rep_type::node_type;

using insert_return_type = typename _rep_type::insert_return_type;

#endif

map與set其實現原理類似,不同的是map中每個元素是std::pair對。

template ,typename _alloc=std::allocator> >

class map

}

其他具體實現細節這裡不再列出,只要懂紅黑樹的原理,很容易理解。

這個實現與map不同,其底層是雜湊表,理解了雜湊表就很容易理解unordered_map。

template,class _pred = std::equal_to<_key>,class _alloc=std::allocator> >

class unordered_map

#if __cplusplus > 201402l

using node_type = typename _hashtable::node_type;

using insert_return_type = typename _hashtable::insert_return_type;

#endif

STL 關聯容器

1 關聯容器與順序容器的本質區別 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。2 關聯容器的型別 map set multimap multiset 3 pair型別 pair型別的比較 p1 p1 p2 如果兩個pair物件的first和secon...

stl 關聯容器

簡介 對於關聯容器,它的每個元素都有乙個鍵 key 容器中的元素的順序並不能人為隨意決定,而是按照鍵的取值公升序排列的。也就是說,對於乙個關聯容器s,使用迭代器在 s.begin s.end 區間內遍歷,訪問到的序列總是公升序的。分類 按照容器中是否允許出現重複鍵值,關聯容器可分為單重關聯容器和多重...

STL 關聯容器

c primer 第11章 關聯容器和順序容器有根本的不同 關聯容器中的元素是按關鍵字來儲存和訪問的。關聯容器型別 分為有序和無序 有序 map 關聯陣列 儲存鍵值對 set 關鍵字即值,即只儲存關鍵字的容器 multimap 關鍵字可重複出現的map multiset 關鍵字可重複出現的set 無...