名稱空間
變體
操作

std::flat_map

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

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

> class flat_map;
(C++23 起)

flat map 是一個容器介面卡,它提供關聯容器的功能,包含具有唯一鍵的鍵值對。鍵透過比較函式 Compare 進行排序。

類模板 flat_map 作為兩個底層容器的包裝器,分別以 KeyContainerMappedContainer 型別的物件傳入。第一個容器已排序,並且每個鍵的相應值位於第二個容器中的相同索引(偏移量)處。兩個容器中的元素數量相同。

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

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

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

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

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

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

(C++26 起)

目錄

[編輯] 迭代器失效

[編輯] 模板引數

Key - 鍵的型別。如果 Key 的型別與 KeyContainer::value_type 不同,則程式格式錯誤。
T - 對映值的型別。如果 T 的型別與 MappedContainer::value_type 不同,則程式格式錯誤。
Compare - 提供嚴格弱排序的 Compare 型別。
KeyContainer
MappedContainer
- 用於分別儲存鍵和對映值的底層序列容器的型別。此類容器的迭代器應滿足LegacyRandomAccessIterator或建模random_access_iterator。呼叫其成員函式 sizemax_size 不應透過異常退出。

標準容器 std::vectorstd::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 實現定義的LegacyInputIteratorConstexprIterator(從 C++26 開始)random_access_iteratorvalue_type[編輯]
const_iterator 實現定義的LegacyInputIteratorConstexprIterator(從 C++26 開始)random_access_iteratorconst value_type[編輯]
reverse_iterator std::reverse_iterator<iterator>[編輯]
const_reverse_iterator std::reverse_iterator<const_iterator>[編輯]
containers 描述底層容器的型別

struct containers
{
    key_container_type keys;
    mapped_container_type values;
};
[編輯]

[編輯] 成員類

比較 value_type 型別的物件
(類) [編輯]

[編輯] 成員物件

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

[編輯] 成員函式

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

[編輯] 非成員函式

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

[編輯] 輔助類

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

[編輯] 標籤

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

[編輯] 推導指南

[編輯] 註解

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


特性測試 標準 特性
__cpp_lib_flat_map 202207L (C++23) std::flat_mapstd::flat_multimap
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_map

[編輯] 示例

[編輯] 另請參閱

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