STL 容器
標準樣板程式庫 (STL) 提供數個容器儲存相關物件的集合。容器會是所有的樣板類別,可讓您指定哪些物件可以在容器中。本主題提供 STL 容器,可協助您決定將哪個容器最適合您需求的概觀。
有兩個可從中選擇的 STL 程式庫: 原生 STL 和 STL/CLR。如需有關 STL/CLR 的詳細資訊,請參閱STL/CLR 程式庫參考。
在 STL 容器可以分成三個類別、 序列容器、 關聯容器及容器配接器。這些類別和集合隸屬於每個類別,此彙總。在容器的參考文件,就可以找到更詳細的資訊。
序列容器
序列容器維護原始插入的項目的順序。這可讓您指定想来插入容器中的項目。
deque (雙向佇列中) 的容器可以快速的插入與刪除的開頭和結尾的容器。您也會隨機快速存取任何項目。
list容器可以讓快速的插入與刪除容器中的任何地方,但您無法隨機存取容器中的項目。
vector容器,就等於是陣列,而將自動成長視需要而定。
如需有關順序容器的詳細資訊,請參閱下表:
容器 |
原生 STL |
STL/CLR |
---|---|---|
deque |
||
list |
||
vector |
關聯的容器
定義關聯的容器的特性是項目會插入在預先定義,例如排序順序遞增。
關聯的容器可以群組成兩個子集: 對應和設定。A map、 有時稱為 「 字典、 索引鍵/值組所組成。金鑰用來排序序列,而值是某種方式該機碼相關聯。例如, map可能會包含索引鍵表示每個唯一字的文字和數值,代表 word 就會出現在文字中的次數。A set是只是一個遞增容器的唯一項目。
兩者都map和set只允許一個執行個體的機碼或插入至容器的項目。如果需要多個執行個體的項目,請使用multimap或multiset。
同時會將對應,並設定支援雙向 iterator。如需有關 iterator 的詳細資訊,請參閱Iterator。
而不正式部份 STL 標準, hash_map和hash_set通常用來改善搜尋的時間。這些容器儲存其元素為雜湊資料表,其中包含雙向連結的清單的項目每一個資料表項目資料。若要確保最快的搜尋時間,請確定您元件的雜湊演算法會傳回平均分佈的雜湊值。
如需有關關聯的容器的詳細資訊,請參閱下表:
容器 |
原生 STL |
STL/CLR |
---|---|---|
hash_map |
||
hash_multimap |
||
hash_multiset |
||
hash_set |
||
map |
||
multimap |
||
multiset |
||
set |
容器的介面卡
容器的介面卡是只要變形上述的容器。容器的介面卡不支援 iterator。
priority_queue容器組織擁有的最大值的項目永遠為第一個佇列中。
queue容器後面 (第一次,第一個出視窗中) 的 FIFO 語意。插入的第一個項目 (推入) 到佇列是最先被移除 (取出)。
stack容器遵循 LIFO (先出的最後一個) 的語意。要插入的最後一個元素 (推入) 在堆疊上會被移除 (取出) 的第一個項目。
容器的介面卡不支援 iterator,因為他們不適用於 STL 演算法。如需有關演算法的詳細資訊,請參閱演算法。
如需有關的容器配接器的詳細資訊,請參閱下表:
容器 |
原生 STL |
STL/CLR |
---|---|---|
priority_queue |
||
queue |
||
stack |
容器項目的需求
STL 容器所插入的元素可以是公用的複製建構函式、 解構函式公用和公用設定運算子會提供任何物件型別。解構函式可能不會擲回例外狀況。此外,關聯的容器,例如set和map必須具有公用的比較運算子定義,也就是運算子 < 根據預設值。只有公用預設建構函式和一個公用的等價運算子,也可能會要求在容器上的某些作業。
存取容器的項目
使用 iterator 存取容器的項目。如需詳細資訊,請參閱 Iterator。
注意事項 |
---|
您也可以使用針對每一個,在來重複 STL 集合。如需詳細資訊,請參閱 How to: 反覆運算 STL 集合與每個。 |