std::flat_map
在標頭檔案 <flat_map> 中定義 |
||
template< class Key, |
(C++23 起) | |
flat map 是一個容器介面卡,它提供關聯容器的功能,包含具有唯一鍵的鍵值對。鍵透過比較函式 Compare
進行排序。
類模板 flat_map
作為兩個底層容器的包裝器,分別以 KeyContainer
和 MappedContainer
型別的物件傳入。第一個容器已排序,並且每個鍵的相應值位於第二個容器中的相同索引(偏移量)處。兩個容器中的元素數量相同。
在標準庫中,只要使用Compare要求的地方,唯一性都透過等價關係確定。非正式地,如果兩個物件 a 和 b 互不小於對方,則它們被認為是等價的:!comp(a, b) && !comp(b, a)。
std::flat_map
滿足Container、ReversibleContainer、可選容器要求以及AssociativeContainer的所有要求(包括對數搜尋複雜度),除了:
- 與節點相關的要求不適用,
- 迭代器失效要求不同,
- 插入和擦除操作的複雜度是線性的。
flat map 支援大多數使用唯一鍵的關聯容器操作。
|
(C++26 起) |
目錄 |
[編輯] 迭代器失效
本節不完整 |
[編輯] 模板引數
Key | - | 鍵的型別。如果 Key 的型別與 KeyContainer::value_type 不同,則程式格式錯誤。 |
T | - | 對映值的型別。如果 T 的型別與 MappedContainer::value_type 不同,則程式格式錯誤。 |
Compare | - | 提供嚴格弱排序的 Compare 型別。 |
KeyContainer MappedContainer |
- | 用於分別儲存鍵和對映值的底層序列容器的型別。此類容器的迭代器應滿足LegacyRandomAccessIterator或建模random_access_iterator 。呼叫其成員函式 size 和 max_size 不應透過異常退出。標準容器 std::vector 和 std::deque 滿足這些要求。 |
[編輯] 成員型別
型別 | 定義 |
key_container_type
|
KeyContainer |
mapped_container_type
|
MappedContainer |
key_type
|
Key |
mapped_type
|
T |
value_type
|
std::pair<key_type, mapped_type> |
key_compare
|
Compare |
reference
|
std::pair<const key_type&, mapped_type&> |
const_reference
|
std::pair<const key_type&, const mapped_type&> |
size_type
|
std::size_t |
difference_type
|
std::ptrdiff_t |
iterator
|
實現定義的LegacyInputIterator,ConstexprIterator(從 C++26 開始)和random_access_iterator 到value_type |
const_iterator
|
實現定義的LegacyInputIterator,ConstexprIterator(從 C++26 開始)和random_access_iterator 到const value_type |
reverse_iterator
|
std::reverse_iterator<iterator> |
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
containers
|
描述底層容器的型別 struct containers |
[編輯] 成員類
比較 value_type 型別的物件(類) |
[編輯] 成員物件
成員 | 描述 |
containers c (私有) |
被適配的容器 (僅用於闡釋的成員物件*) |
key_compare compare (私有) |
比較函式物件 (僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造 flat_map (公共成員函式) | |
(解構函式) (隱式宣告) |
銷燬容器介面卡的每個元素 (公開成員函式) |
向容器介面卡賦值 (公共成員函式) | |
元素訪問 | |
訪問指定的元素,帶邊界檢查 (公共成員函式) | |
訪問或插入指定元素 (公共成員函式) | |
迭代器 | |
返回指向起始的迭代器 (公共成員函式) | |
返回指向末尾的迭代器 (公共成員函式) | |
返回指向起始的逆向迭代器 (公共成員函式) | |
返回指向末尾的逆向迭代器 (公共成員函式) | |
容量 | |
檢查容器介面卡是否為空 (公共成員函式) | |
返回元素數量 (公共成員函式) | |
返回元素的最大可能數量 (公共成員函式) | |
修改器 | |
就地構造元素 (公共成員函式) | |
使用提示就地構造元素 (公共成員函式) | |
如果鍵不存在則原地插入,如果鍵存在則不執行任何操作 (公共成員函式) | |
插入元素 (公共成員函式) | |
插入元素範圍 (公共成員函式) | |
插入元素或如果鍵已存在則賦值給當前元素 (公共成員函式) | |
提取底層容器 (公共成員函式) | |
替換底層容器 (公共成員函式) | |
擦除元素 (公共成員函式) | |
交換內容 (公共成員函式) | |
清除內容 (公共成員函式) | |
查詢 | |
查詢具有特定鍵的元素 (公共成員函式) | |
返回匹配特定鍵的元素數量 (公共成員函式) | |
檢查容器是否包含具有特定鍵的元素 (公共成員函式) | |
返回指向第一個不小於給定鍵的元素的迭代器 (公共成員函式) | |
返回指向第一個大於給定鍵的元素的迭代器 (公共成員函式) | |
返回與特定鍵匹配的元素範圍 (公共成員函式) | |
觀察器 | |
返回比較鍵的函式 (公共成員函式) | |
返回比較 value_type 型別物件中的鍵的函式(公共成員函式) | |
直接訪問底層鍵容器 (公共成員函式) | |
直接訪問底層值容器 (公共成員函式) |
[編輯] 非成員函式
(C++23) |
按字典序比較兩個 flat_map 的值(函式模板) |
(C++23) |
特化 std::swap 演算法 (函式模板) |
(C++23) |
擦除所有滿足特定標準的元素 (函式模板) |
[編輯] 輔助類
特化 std::uses_allocator 型別特性 (類模板特化) |
[編輯] 標籤
(C++23) |
表示範圍的元素已排序且唯一 (標籤) |
[編輯] 推導指南
[編輯] 註解
成員型別 iterator
和 const_iterator
可以是相同型別的別名。這意味著使用這兩種型別作為引數型別定義一對函式過載可能會違反單一定義規則。由於 iterator
可以轉換為 const_iterator
,因此使用 const_iterator
作為引數型別的單個函式將代替工作。
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__cpp_lib_flat_map |
202207L |
(C++23) | std::flat_map 和 std::flat_multimap |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::flat_map |
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 另請參閱
(C++23) |
適配兩個容器以提供按鍵排序的鍵值對集合 (類模板) |
鍵值對集合,按鍵排序,鍵唯一 (類模板) | |
(C++11) |
鍵值對的集合,按鍵雜湊,鍵是唯一的 (類模板) |