std::unordered_multiset
| 定義於標頭檔 <unordered_set> |
||
| template< class Key, |
(1) | (C++11 起) |
| namespace pmr { template< |
(2) | (自 C++17 起) |
std::unordered_multiset 是一種關聯容器,其中包含類型為 Key 的對象集合,這些對象可能不是唯一的。搜尋、插入和刪除操作具有平均常數時間複雜度。
在內部,元素不會以任何特定順序排序,而是組織成桶(bucket)。元素被放置到哪個桶中完全取決於其值的雜湊值(hash)。這使得對個別元素的訪問非常快速,因為一旦計算出雜湊值,它就指向了放置該元素的確切桶。
此容器的迭代順序不需要是穩定的(因此,例如 std::equal 不能用於比較兩個 std::unordered_multiset),除了鍵值相互「等價」(使用 key_eq() 作為比較器進行比較相等)的每一組元素在迭代順序中形成一個連續的子範圍,也可以通過 equal_range() 訪問。
std::unordered_multiset 符合 Container、AllocatorAwareContainer 和 UnorderedAssociativeContainer 的要求。
|
|
(C++26 起) |
目錄 |
[編輯] 模板參數
| 本節尚不完整 原因:新增範本參數的描述。 |
[編輯] 成員類型
| 類型 | 定義 |
key_type
|
Key |
value_type
|
Key |
size_type
|
無號整數型別(通常為 std::size_t) |
difference_type
|
有號整數型別(通常為 std::ptrdiff_t) |
hasher
|
Hash |
key_equal
|
KeyEqual |
allocator_type
|
Allocator |
reference
|
value_type& |
const_reference
|
const value_type& |
pointer
|
std::allocator_traits<Allocator>::pointer |
const_pointer
|
std::allocator_traits<Allocator>::const_pointer |
iterator
|
指向 value_type 的常量 LegacyForwardIterator 以及 ConstexprIterator(自 C++26 起) |
const_iterator
|
LegacyForwardIterator 與 ConstexprIterator(自 C++26) 至 const value_type |
local_iterator
|
一種迭代器類型,其類別、值、差異、指標和 參考類型與 iterator 相同。此迭代器可用於遍歷單個桶,但不能跨桶遍歷 |
const_local_iterator
|
一種迭代器類型,其類別、值、差異、指標和 參考類型與 const_iterator 相同。此迭代器可用於遍歷單個桶,但不能跨桶遍歷 |
node_type (C++17 起) |
代表容器節點的 節點控制代碼 (node handle) 特化版本 |
[編輯] 成員函數
構造 unordered_multiset(公開成員函式) | |
解構 unordered_multiset(公開成員函式) | |
| 指派值給容器 (公開成員函式) | |
| 回傳關聯的配置器 (公開成員函式) | |
迭代器 | |
| 回傳指向起點的反覆器 (公開成員函式) | |
| 回傳指向終點的反覆器 (公開成員函式) | |
容量 | |
| 檢查容器是否為空 (公開成員函式) | |
| 回傳元素個數 (公開成員函式) | |
| 回傳最大可能的元素個數 (公開成員函式) | |
修改器 | |
| 清除內容 (公開成員函式) | |
| 插入元素 或節點(C++17 起) (公開成員函式) | |
| (C++23) |
插入數值範圍元素 (公開成員函式) |
| 原地建構元素 (公開成員函式) | |
| 使用提示(hint)原地建構元素 (公開成員函式) | |
| 刪除元素 (公開成員函式) | |
| 交換內容 (公開成員函式) | |
| (C++17) |
從容器中提取節點 (公開成員函式) |
| (C++17) |
從另一個容器接合(splice)節點 (公開成員函式) |
查找 | |
| 回傳符合指定鍵的元素數量 (公開成員函式) | |
| 尋找具有指定鍵的元素 (公開成員函式) | |
| (C++20) |
檢查容器是否包含具有指定鍵的元素 (公開成員函式) |
| 回傳與特定鍵相匹配的元素範圍 (公開成員函式) | |
Bucket 介面 | |
| 返回指向指定桶開頭的迭代器 (公開成員函式) | |
| 返回指向指定桶結尾的迭代器 (公開成員函式) | |
| 返回桶的數量 (公開成員函式) | |
| 返回桶的最大數量 (公開成員函式) | |
| 返回特定桶中的元素數量 (公開成員函式) | |
| 返回特定鍵所屬的桶索引 (公開成員函式) | |
雜湊策略 (Hash policy) | |
| 返回每個桶的平均元素數量 (公開成員函式) | |
| 管理每個桶的最大平均元素數量 (公開成員函式) | |
| 預留至少指定數量的桶並重新產生雜湊表 (公開成員函式) | |
| 為至少指定數量的元素預留空間並重新產生雜湊表 (公開成員函式) | |
觀察器 | |
| 返回用於雜湊鍵的函式 (公開成員函式) | |
| 返回用於比較鍵是否相等的函式 (公開成員函式) | |
[編輯] 非成員函數
| (C++11)(C++11)(在 C++20 中移除) |
比較 unordered_multiset 中的值(函式模板) |
| 特化 std::swap 演算法 (函式範本) | |
| 移除所有符合特定條件的元素 (函式範本) |
推導指引 |
(自 C++17 起) |
[編輯] 附註
成員型別 iterator 與 const_iterator 可能為相同型別的別名。這意味著定義一對使用這兩種型別作為參數型別的函式過載可能會違反單一定義規則 (One Definition Rule)。由於 iterator 可轉換為 const_iterator,因此改用一個以 const_iterator 作為參數型別的函式即可運作。
| 功能測試巨集 | 數值 | 標準 | 功能 |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | 容器的範圍建構與插入 |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::unordered_muliset |
[編輯] 範例
| 本節尚不完整 理由:無範例 |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯應用於之前的 C++ 標準。
| DR | 應用於 | 出版時的行為 | 正確的行為 |
|---|---|---|---|
| LWG 2050 | C++11 | reference、const_reference、pointer和 const_pointer 的定義基於 allocator_type |
基於 value_type 和std::allocator_traits |
[編輯] 參見
| (C++11) |
唯一鍵的集合,按鍵雜湊 (類別範本) |
| 鍵的集合,按鍵排序 (類別樣板) | |
| (C++23) |
適配一個容器以提供按鍵排序的鍵集合 (類別樣板) |