STL學習筆記——關聯式容器(二級容器)
阿新 • • 發佈:2019-01-05
1.RB-tree(二叉平衡搜尋樹,有自動排序功能)
2.set
1)所有的元素都會根據元素的鍵值自動被排序(預設升序),set元素的鍵值就是實值,set不允許兩個元素有相同的鍵值;
2)set的迭代器為只讀迭代器,set不允許通過迭代器修改元素值,鍵值無法被修改;
3)由於set底層由RB-tree實現,迭代器相當於指向結點的指標,增刪元素時記憶體並沒有發生“改變”(元素移動),因此指向記憶體的指標不會失效。所以在客戶對它進行增刪操作前後,所有的迭代器都不會失效,被刪除元素的迭代器除外;
4)對於關聯式容器應該使用其自身的find函式來搜尋元素,比STL演算法find更有效率 。
3.map
1)所有的元素都會根據元素的鍵值自動被排序(預設升序);map的所有元素都是pair,同時擁有鍵值和實值;
map不允許兩個元素有相同的鍵值;
2)map允許通過迭代器修改元素值,但鍵值無法被修改(會影響元素的排列規則);
3)由於map底層由RB-tree實現,迭代器相當於指向結點的指標,增刪元素時記憶體並沒有發生“改變”(元素移動),因此指向記憶體的指標不會失效。所以在客戶對它進行增刪操作前後,所有的迭代器都不會失效,被刪除元素的迭代器除外;
4)對於關聯式容器應該使用其自身的find函式來搜尋元素,比STL演算法find更有效率。
4.multiset 允許元素的鍵值重複
5.multimap允許元素的鍵值重複
6.hashtable(無自動排序功能)
1)SGI-STL的hashtable使用開鏈法來解決衝突,採用雜湊桶結構來儲存結點,由vector<node*>和list-node組成;
2)hashtable的迭代器型別為forwarditerator,沒有後退操作;
2.set
1)所有的元素都會根據元素的鍵值自動被排序(預設升序),set元素的鍵值就是實值,set不允許兩個元素有相同的鍵值;
2)set的迭代器為只讀迭代器,set不允許通過迭代器修改元素值,鍵值無法被修改;
3)由於set底層由RB-tree實現,迭代器相當於指向結點的指標,增刪元素時記憶體並沒有發生“改變”(元素移動),因此指向記憶體的指標不會失效。所以在客戶對它進行增刪操作前後,所有的迭代器都不會失效,被刪除元素的迭代器除外;
4)對於關聯式容器應該使用其自身的find函式來搜尋元素,比STL演算法find更有效率
3.map
1)所有的元素都會根據元素的鍵值自動被排序(預設升序);map的所有元素都是pair,同時擁有鍵值和實值;
map不允許兩個元素有相同的鍵值;
2)map允許通過迭代器修改元素值,但鍵值無法被修改(會影響元素的排列規則);
3)由於map底層由RB-tree實現,迭代器相當於指向結點的指標,增刪元素時記憶體並沒有發生“改變”(元素移動),因此指向記憶體的指標不會失效。所以在客戶對它進行增刪操作前後,所有的迭代器都不會失效,被刪除元素的迭代器除外;
4)對於關聯式容器應該使用其自身的find函式來搜尋元素,比STL演算法find更有效率。
4.multiset
5.multimap允許元素的鍵值重複
6.hashtable(無自動排序功能)
1)SGI-STL的hashtable使用開鏈法來解決衝突,採用雜湊桶結構來儲存結點,由vector<node*>和list-node組成;
2)hashtable的迭代器型別為forwarditerator,沒有後退操作;