一、容器
分為序列容器、關聯容器、不定續容器
不定續容器:在資料存入容器中,位置不確定
序列容器://都有一定的次序,按照放進去的次序
array 用key來找value就非常快,所以比較適合查詢。
vector
deque:雙向
list:雙向鍊錶
forward-list:單向鍊錶
關聯容器::
set/mutiset:集合,內部是通過紅黑樹(rbtree)實現的。原本是並沒有限定用什麼資料結構來做set,但是因為rbtree效果好,所以各家編譯器構會用其實現。
map/multimap:key&value
不定續容器
unordered set/mutise
unordered map/multimap
hash table:最好的實現方法是separate chaining,有許多籃子,每個籃子是乙個鍊錶。
queue:
先進先出
由於stack和queue是在deque的選配器
二、關聯容器
set/multiset:(key就是value,value就是key)
queue和stack不能獲取容器中特定位置的iterator,不然會破壞這個容器。
紅黑樹形成結構。
這個容器沒有push,用insert(),落到樹中有一定規則。(按照樹的排序訪問,有點像前序排序,後序排序,等)
stl標準庫中有find,二set中也就find(),顯然在set中用內部成員函式速度更快。
multiset重複的元素也會放進去,而set不會放進去
map/mutimap:二元
key不一樣,value可以一樣
map.first、map.second
注意:map原本是拒絕重複的訪問,重複指的是key和value同時重複。
unordered_mutiset:
不是用紅黑樹形成的,是用hashtable形成的。
bucket_count():籃子的個數
c.bucket_size(i);//第i個籃子儲存的元素量
規定:如果元素的個數大於 或等於籃子的個數,需要將籃子擴充到原來的兩倍。
unordered_mutimap:
最適合用於蒐集大量的資料
使用容器:
hash_set
hash_map
hash_multiset
hash_multimap
容器之分類與各種測試(四) multimap
multiset和multimap的具體區別在於,前者的key值就是自己儲存的value,後者的key與value是分開的不相關的。例程 include include include include include include include includeusing namespace st...
容器之分類與各種測試(三) stack
stack是棧,其實現也是使用了雙端佇列 只要不用雙端佇列的一端,僅用單端資料進出即完成單端佇列的功能 由於queue和stack的實現均是使用deque,沒有自己的資料結構和演算法,所以這倆也被稱為容器介面卡 container adapter 例程 include include include...
容器之分類與各種測試(三) queue
queue是單端佇列,但是在其實現上是使用的雙端佇列,所以在queue的實現上多用的是deque的方法。只要用雙端佇列的一端只出資料,另一端只進資料即可從功能上實現單端佇列 如下圖 例程 include include include include include include include ...