名稱空間
變體
操作

std::flat_multimap

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

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

> flat_multimap;
(C++23 起)

flat_multimap 是一個容器介面卡,它提供關聯容器的功能,包含鍵值對,並允許具有相同鍵值的多個條目。鍵透過比較函式 Compare 進行排序。

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

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


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

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

flat multimap 支援關聯容器的大多數使用等價鍵的操作。

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

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

(C++26 起)

目錄

[編輯] 迭代器失效

[編輯] 模板引數

Key - 鍵的型別。如果 Key 的型別與 KeyContainer::value_type 不同,則程式格式錯誤。
T - 對映值的型別。如果 T 的型別與 MappedContainer::value_type 不同,則程式格式錯誤。
Compare - 提供嚴格弱排序的 Compare 型別。
KeyContainer
MappedContainer
- 用於儲存鍵和對映值的底層序列容器的型別。這些容器的迭代器應滿足舊式隨機訪問迭代器或建模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 實現定義的 舊式輸入迭代器, ConstexprIterator(C++26 起)random_access_iteratorvalue_type[編輯]
const_iterator 實現定義的 舊式輸入迭代器, ConstexprIterator(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_multimap
(公共成員函式) [編輯]
(解構函式)
(隱式宣告)
銷燬容器介面卡的每個元素
(公開成員函式)
向容器介面卡賦值
(公共成員函式) [編輯]
迭代器
返回指向起始的迭代器
(公共成員函式) [編輯]
返回指向末尾的迭代器
(公共成員函式) [編輯]
返回指向起始的逆向迭代器
(公共成員函式) [編輯]
返回指向末尾的逆向迭代器
(公共成員函式) [編輯]
容量
檢查容器介面卡是否為空
(公共成員函式) [編輯]
返回元素數量
(公共成員函式) [編輯]
返回元素的最大可能數量
(公共成員函式) [編輯]
修改器
就地構造元素
(公共成員函式) [編輯]
使用提示就地構造元素
(公共成員函式) [編輯]
插入元素
(公共成員函式) [編輯]
插入元素範圍
(公共成員函式) [編輯]
提取底層容器
(公共成員函式) [編輯]
替換底層容器
(公共成員函式) [編輯]
擦除元素
(公共成員函式) [編輯]
交換內容
(公共成員函式) [編輯]
清除內容
(公共成員函式) [編輯]
查詢
查詢具有特定鍵的元素
(公共成員函式) [編輯]
返回匹配特定鍵的元素數量
(公共成員函式) [編輯]
檢查容器是否包含具有特定鍵的元素
(公共成員函式) [編輯]
返回指向第一個不小於給定鍵的元素的迭代器
(公共成員函式) [編輯]
返回指向第一個大於給定鍵的元素的迭代器
(公共成員函式) [編輯]
返回與特定鍵匹配的元素範圍
(公共成員函式) [編輯]
觀察器
返回比較鍵的函式
(公共成員函式) [編輯]
返回比較 value_type 型別物件中的鍵的函式
(公共成員函式) [編輯]
直接訪問底層鍵容器
(公共成員函式) [編輯]
直接訪問底層值容器
(公共成員函式) [編輯]

[編輯] 非成員函式

按字典序比較兩個 flat_multimap 的值
(函式模板) [編輯]
特化 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_multimap

[編輯] 示例

[編輯] 參見

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