名稱空間
變體
操作

std::flat_multiset

來自 cppreference.com
< cpp‎ | 容器
 
 
 
 
在標頭檔案 <flat_set> 中定義
template<

    class Key,
    class Compare = std::less<Key>,
    class KeyContainer = std::vector<Key>

> class flat_multiset;
(C++23 起)

flat_multiset 是一種容器介面卡,它提供關聯容器的功能,儲存型別為 Key 的有序物件集。與 std::flat_set 不同,它允許具有等效值的多個鍵。排序使用鍵比較函式 Compare 完成。

類模板 flat_multiset 作為對型別為 KeyContainer 的底層有序容器的包裝器。

標準庫使用 Compare 要求的地方,唯一性透過等價關係確定。非正式地,如果兩個物件 ab 互不小於對方,則認為它們是等價的:!comp(a, b) && !comp(b, a)


std::flat_multiset 滿足 ContainerReversibleContainer可選容器要求以及 AssociativeContainer 的所有要求(包括對數搜尋複雜度),除了

  • 與節點相關的要求不適用,
  • 迭代器失效要求不同,
  • 插入和擦除操作的複雜度是線性的。

flat_multiset 支援大部分使用等價鍵的 AssociativeContainer 操作。

std::flat_multiset 的所有成員函式都是 constexpr:可以在常量表達式的求值中使用和建立 std::flat_multiset 物件。

然而,std::flat_multiset 物件通常不能是 constexpr,因為任何動態分配的儲存都必須在同一常量表達式的求值中釋放。

(C++26 起)

目錄

[編輯] 迭代器失效

[編輯] 模板引數

Key - 儲存元素的型別。如果 KeyKeyContainer::value_type 不是同一型別,則程式格式錯誤。
Compare - 提供嚴格弱排序的 Compare 型別。
KeyContainer - 用於儲存元素的底層 SequenceContainer 型別。此類容器的迭代器應滿足 LegacyRandomAccessIterator 或實現 random_access_iterator

標準容器 std::vectorstd::deque 滿足這些要求。

[編輯] 成員型別

型別 定義
container_type KeyContainer[編輯]
key_type Key[編輯]
value_type Key[編輯]
key_compare Compare[編輯]
value_compare Compare[編輯]
reference value_type&[編輯]
const_reference const value_type&[編輯]
size_type typename KeyContainer::size_type[編輯]
difference_type typename KeyContainer::difference_type[編輯]
iterator 實現定義的 LegacyRandomAccessIteratorConstexprIterator(C++26 起)random_access_iteratorvalue_type[編輯]
const_iterator 實現定義的 LegacyRandomAccessIteratorConstexprIterator(C++26 起)random_access_iteratorconst value_type[編輯]
reverse_iterator std::reverse_iterator<iterator>[編輯]
const_reverse_iterator std::reverse_iterator<const_iterator>[編輯]

[編輯] 成員物件

成員 描述
container_type c (私有) 被適配的容器
(僅用於闡釋的成員物件*)
key_compare compare (私有) 比較函式物件
(僅用於闡釋的成員物件*)

[編輯] 成員函式

構造 flat_multiset
(公有成員函式) [編輯]
(解構函式)
(隱式宣告)
銷燬容器介面卡的每個元素
(公開成員函式)
向容器介面卡賦值
(公有成員函式) [編輯]
迭代器
返回指向起始的迭代器
(公有成員函式) [編輯]
返回指向末尾的迭代器
(公有成員函式) [編輯]
返回指向起始的逆向迭代器
(公有成員函式) [編輯]
返回指向末尾的逆向迭代器
(公有成員函式) [編輯]
容量
檢查容器介面卡是否為空
(公有成員函式) [編輯]
返回元素數量
(公有成員函式) [編輯]
返回元素的最大可能數量
(公有成員函式) [編輯]
修改器
就地構造元素
(公有成員函式) [編輯]
使用提示就地構造元素
(公有成員函式) [編輯]
插入元素
(公有成員函式) [編輯]
插入元素範圍
(公有成員函式) [編輯]
提取底層容器
(公有成員函式) [編輯]
替換底層容器
(公有成員函式) [編輯]
擦除元素
(公有成員函式) [編輯]
交換內容
(公有成員函式) [編輯]
清除內容
(公有成員函式) [編輯]
查詢
查詢具有特定鍵的元素
(公有成員函式) [編輯]
返回匹配特定鍵的元素數量
(公有成員函式) [編輯]
檢查容器是否包含具有特定鍵的元素
(公有成員函式) [編輯]
返回指向第一個不小於給定鍵的元素的迭代器
(公有成員函式) [編輯]
返回指向第一個大於給定鍵的元素的迭代器
(公有成員函式) [編輯]
返回與特定鍵匹配的元素範圍
(公有成員函式) [編輯]
觀察器
返回比較鍵的函式
(公有成員函式) [編輯]
返回比較 value_type 型別物件中的鍵的函式
(公有成員函式) [編輯]

[編輯] 非成員函式

按字典序比較兩個 flat_multiset 的值
(函式模板) [編輯]
特化 std::swap 演算法
(函式模板) [編輯]
擦除所有滿足特定標準的元素
(函式模板) [編輯]

[編輯] 輔助類

特化 std::uses_allocator 型別特性
(類模板特化) [編輯]

[編輯] 標籤

表示範圍的元素已排序(不要求唯一性)
(標籤)[編輯]

[編輯] 推導指南

[編輯] 注意

成員型別 iteratorconst_iterator 可以是相同型別的別名。這意味著使用這兩種型別作為引數型別定義一對函式過載可能違反單一定義規則。由於 iterator 可以轉換為 const_iterator,因此單個函式使用 const_iterator 作為引數型別即可。


特性測試 標準 特性
__cpp_lib_flat_set 202207L (C++23) std::flat_setstd::flat_multiset
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_multiset

[編輯] 示例

[編輯] 參見

(C++23)
適配容器以提供唯一鍵的集合,按鍵排序
(類模板) [編輯]
鍵的集合,按鍵排序
(類模板) [編輯]
鍵的集合,按鍵雜湊
(類模板) [編輯]