1. 程式人生 > >C++STL裡面7個常用容器的比較

C++STL裡面7個常用容器的比較

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