第二講 容器分類與各種測試

2021-10-07 12:55:08 字數 1297 閱讀 2531

一、容器

分為序列容器、關聯容器、不定續容器

不定續容器:在資料存入容器中,位置不確定

序列容器://都有一定的次序,按照放進去的次序

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 ...