Namespaces
Variants

std:: flat_map

From cppreference.net
定义于头文件 <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 类模板作为两个底层容器的包装器,分别以 KeyContainer MappedContainer 类型的对象形式传入。第一个容器经过排序,每个键对应的值位于第二个容器中的相同索引(偏移量)位置。两个容器中的元素数量始终保持一致。

凡是标准库使用 Compare 要求的地方,唯一性都是通过等价关系来确定的。非正式地说,两个对象 a b 被认为是等价的,当且仅当两者互不小于对方: ! comp ( a, b ) && ! comp ( b, a )

std::flat_map 满足 Container ReversibleContainer 可选容器要求 以及 AssociativeContainer 的所有要求(包括对数搜索复杂度),但以下情况除外:

  • 与节点相关的要求不适用,
  • 迭代器失效要求不同,
  • 插入和擦除操作的复杂度为线性。

平面映射支持大多数使用唯一键的 AssociativeContainer 操作。

std::flat_map 的所有成员函数均为 constexpr :可以在常量表达式的求值过程中创建和使用 std::flat_map 对象。

然而, std::flat_map 对象通常不能是 constexpr ,因为任何动态分配的存储必须在同一常量表达式求值期间释放。

(自 C++26 起)

目录

迭代器失效

模板参数

键类型 - 键的类型。若 Key KeyContainer::value_type 类型不同,则程序非良构。
值类型 - 映射值的类型。若 T MappedContainer::value_type 类型不同,则程序非良构。
比较器 - 提供严格弱序的 Compare 类型。
键容器
值容器
- 用于存储键和映射值的底层 SequenceContainer 类型。此类容器的迭代器应满足 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
{
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 类型特征
(类模板特化)

标签

表示范围中的元素已排序且唯一
(标签)

推导指引

注释

成员类型 iterator const_iterator 可能是同一类型的别名。这意味着使用这两种类型作为参数类型定义一对函数重载可能违反 One Definition Rule 。由于 iterator 可转换为 const_iterator ,使用单个以 const_iterator 作为参数类型的函数即可替代。

功能测试 标准 功能特性
__cpp_lib_flat_map 202207L (C++23) std::flat_map std::flat_multimap
__cpp_lib_constexpr_flat_map 202502L (C++26) constexpr std::flat_map

示例

另请参阅

适配两个容器以提供按键排序的键值对集合
(类模板)
按键排序的键值对集合,键具有唯一性
(类模板)
通过哈希存储的键值对集合,键具有唯一性
(类模板)