std::flat_set
| 在標頭檔案 <flat_set> 中定義 |
||
| template< class Key, |
(C++23 起) | |
flat set 是一個容器介面卡,它提供關聯容器的功能,儲存型別為Key的唯一物件的有序集合。排序使用鍵比較函式Compare完成。
類模板flat_set充當傳遞型別為KeyContainer的底層有序容器的包裝器。
標準庫中使用Compare要求的地方,唯一性由使用等價關係決定。非正式地,如果兩個物件a和b都不會比另一個小,則認為它們是等價的:!comp(a, b) && !comp(b, a)。
std::flat_set滿足Container、ReversibleContainer、可選容器要求的所有要求,以及AssociativeContainer的所有要求(包括對數搜尋複雜度),除了
- 與節點相關的要求不適用,
- 迭代器失效要求不同,
- 插入和擦除操作的複雜度是線性的。
flat set 支援大多數使用唯一鍵的關聯容器操作。
|
|
(C++26 起) |
目錄 |
[編輯] 迭代器失效
| 本節不完整 |
[編輯] 模板引數
| Key | - | 儲存元素的型別。如果Key與KeyContainer::value_type型別不同,則程式格式錯誤。 |
| Compare | - | 提供嚴格弱排序的 Compare 型別。 |
| KeyContainer | - | 用於儲存元素的底層序列容器的型別。此類容器的迭代器應滿足舊式隨機訪問迭代器或模型random_access_iterator。標準容器std::vector和std::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
|
實現定義的LegacyRandomAccessIterator,ConstexprIterator(自 C++26 起)和random_access_iterator到value_type |
const_iterator
|
實現定義的LegacyRandomAccessIterator,ConstexprIterator(自 C++26 起)和random_access_iterator到const 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 型別物件中的鍵的函式(公共成員函式) | |
[編輯] 非成員函式
| (C++23) |
按字典序比較兩個flat_set的值(函式模板) |
| (C++23) |
特化 std::swap 演算法 (函式模板) |
| (C++23) |
擦除所有滿足特定標準的元素 (函式模板) |
[編輯] 輔助類
| 特化 std::uses_allocator 型別特性 (類模板特化) |
[編輯] 標籤
| (C++23) |
表示範圍的元素已排序且唯一 (標籤) |
[編輯] 推導指南
[編輯] 註記
成員型別iterator和const_iterator可能是相同型別的別名。這意味著使用這兩種型別作為引數型別定義一對函式過載可能違反單定義規則。由於iterator可轉換為const_iterator,因此使用const_iterator作為引數型別的單個函式將起作用。
flat set 相對於其他標準容器介面卡的一些優點是
- 潛在更快的查詢(儘管搜尋操作具有對數複雜度)。
- 更快的迭代:隨機訪問迭代器而不是雙向迭代器。
- 小物件記憶體消耗更少(如果KeyContainer::shrink_to_fit()可用,大物件也是如此)。
- 更好的快取效能(取決於
KeyContainer,鍵儲存在連續的記憶體塊中)。
flat set 的一些缺點是
- 迭代器不穩定(插入和擦除元素時迭代器失效)。
- 不能儲存不可複製和不可移動的型別值。
- 較弱的異常安全性(在擦除和插入中移動值時,複製/移動建構函式可能會丟擲異常)。
- 較慢的(即線性)插入和擦除,尤其是對於不可移動的型別。
| 特性測試宏 | 值 | 標準 | 特性 |
|---|---|---|---|
__cpp_lib_flat_set |
202207L |
(C++23) | std::flat_set 和 std::flat_multiset |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::flat_set |
[編輯] 示例
| 本節不完整 原因:無示例 |
[編輯] 另請參閱
| (C++23) |
適配容器以提供按鍵排序的鍵集合 (類模板) |
| 唯一鍵的集合,按鍵排序 (類模板) | |
| (C++11) |
由鍵雜湊的唯一鍵集合 (類模板) |