STL基礎4:STL7個常用容器的比較
阿新 • • 發佈:2018-12-27
1.STL容器分類:
STL的容器可以分為以下幾個大類:
一 順序(序列)容器, 有vector, list, deque, string,stack( 介面卡類), queue( 介面卡類), priority queues( 介面卡類)
二 關聯容器, 有set, multiset, map, multimap, bitset,hash_set, hash_map, hash_multiset, hash_multimap
2.容器比較
vector | deque | list | set | multiset | map | multimap | |
名稱 | 向量容器 | 雙向佇列容器 | 列表容器 | 集合 | 多重集合 | 對映 | 多重對映 |
內部數 據結構 |
連續儲存的陣列形式(一端開口的組) |
連續或分段連續儲存陣列(兩端 開口的陣列) |
雙向環狀連結串列 | 紅黑樹(平衡檢索二叉樹) | 紅黑樹 | 紅黑樹 | 紅黑樹 |
標頭檔案 | #include <vector> | #include <deque> | #include <list> | #include <set> | #include <set> | #include <map> | #include <map> |
操作元素的方式 | 下標運算子:[0](可以用迭代器,但插入刪除操作時會失效) |
下標運算子或迭代器 |
只能用迭代器(不斷用變數值來遞推新值,相當於指標),不支援使用下標運算子 |
迭代器 | 迭代器 | 迭代器 | 迭代器 |
插入刪除操作迭代器是否失效 | 插入和刪除元素都會使迭代器失效 | 插入任何元素都會使迭代器失效。刪除頭和尾元素,指向被刪除節點迭代器失效,而刪除中間元素會使所有迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 |
3.各容器特點比較以及選擇
vector | deque | list | set | multiset | map | multimap | |
名稱 | 向量容器 | 雙向佇列容器 | 列表容器 | 集合 | 多重集合 | 對映 | 多重對映 |
特點 |
增加和獲取元素效率 很高,插入和刪除的 效率很低 |
增加和獲取元素效率 較高,插入和刪除的 效率較高 |
增加和獲取元素效率 很低,插入和刪除的 效率很高 |
1.鍵(關鍵字)和值(資料)相等(就是模版只有一個引數,鍵和值合起來) 2.鍵唯一 3.元素預設按升序排列 |
1.鍵和值相等 2.鍵可以不唯一 3.元素預設按升序排列 |
1.鍵和值分開(模版有兩個引數,前面是鍵後面是值) 2.鍵唯一 3.元素預設按鍵的升序排列 |
1.鍵和值分開 2.鍵可以不唯一 3.元素預設按鍵的升序排列 |
定義容器 |
vector<string> book(50); | deque<string> book(50); | list<string> book; | set<string> book; | multiset<string> book; | map<int,string> book; | multimap<int,string> book; |
4.各容器的圖表說明
4.1 vector
4.2 deque
4.3 list
4.4 map/multimap
4.5 set/multiset