名稱空間
變體
操作

std::flat_set

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

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

> class flat_set;
(C++23 起)

flat set 是一個容器介面卡,它提供關聯容器的功能,儲存型別為Key的唯一物件的有序集合。排序使用鍵比較函式Compare完成。

類模板flat_set充當傳遞型別為KeyContainer的底層有序容器的包裝器。

標準庫中使用Compare要求的地方,唯一性由使用等價關係決定。非正式地,如果兩個物件ab都不會比另一個小,則認為它們是等價的:!comp(a, b) && !comp(b, a)

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

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

flat set 支援大多數使用唯一鍵的關聯容器操作。

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

但是,std::flat_set物件通常不能是constexpr,因為任何動態分配的儲存必須在同一常量表達式評估中釋放。

(C++26 起)

目錄

[編輯] 迭代器失效

[編輯] 模板引數

Key - 儲存元素的型別。如果KeyKeyContainer::value_type型別不同,則程式格式錯誤。
Compare - 提供嚴格弱排序的 Compare 型別。
KeyContainer - 用於儲存元素的底層序列容器的型別。此類容器的迭代器應滿足舊式隨機訪問迭代器或模型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 (private) 被適配的容器
(僅用於闡釋的成員物件*)
key_compare compare (private) 比較函式物件
(僅用於闡釋的成員物件*)

[編輯] 成員函式

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

[編輯] 非成員函式

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

[編輯] 輔助類

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

[編輯] 標籤

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

[編輯] 推導指南

[編輯] 註記

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

flat set 相對於其他標準容器介面卡的一些優點是

  • 潛在更快的查詢(儘管搜尋操作具有對數複雜度)。
  • 更快的迭代:隨機訪問迭代器而不是雙向迭代器
  • 小物件記憶體消耗更少(如果KeyContainer::shrink_to_fit()可用,大物件也是如此)。
  • 更好的快取效能(取決於KeyContainer,鍵儲存在連續的記憶體塊中)。

flat set 的一些缺點是

  • 迭代器不穩定(插入和擦除元素時迭代器失效)。
  • 不能儲存不可複製和不可移動的型別值。
  • 較弱的異常安全性(在擦除和插入中移動值時,複製/移動建構函式可能會丟擲異常)。
  • 較慢的(即線性)插入和擦除,尤其是對於不可移動的型別。
特性測試 標準 特性
__cpp_lib_flat_set 202207L (C++23) std::flat_setstd::flat_multiset
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_set

[編輯] 示例

[編輯] 另請參閱

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