命名空间
变体
操作

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 起)

扁平映射是一个 容器适配器,它提供了关联容器的功能,该关联容器包含具有唯一键的键值对。键使用比较函数 Compare 进行排序。

类模板 flat_map 充当两个底层容器的包装器,分别作为类型为 KeyContainerMappedContainer 的对象传递。第一个容器是排序的,对于每个键,其对应的值都位于第二个容器中的相同索引(偏移量)处。两个容器中的元素数量相同。

在标准库使用 Compare 要求的地方,唯一性是通过使用等价关系确定的。非正式地,如果两个对象 ab 不相互小于,则它们被认为是等价的:!comp(a, b) && !comp(b, a).

std::flat_map 满足 ContainerReversibleContainer可选容器要求 以及 AssociativeContainer 的所有要求(包括对数搜索复杂度),除了

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

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

内容

[编辑] 迭代器失效

[编辑] 模板参数

Key - 键的类型。如果 KeyKeyContainer::value_type 类型不同,则程序格式错误。
T - 映射值的类型。如果 TMappedContainer::value_type 类型不同,则程序格式错误。
Compare - 一个 Compare 类型,提供严格的弱排序。
KeyContainer
MappedContainer
- 用于分别存储键和映射值的底层 SequenceContainer 的类型。此类容器的迭代器应满足 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 实现定义的 LegacyInputIteratorrandom_access_iteratorvalue_type[编辑]
const_iterator 实现定义的 LegacyInputIteratorrandom_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 类型的对象
(类) [编辑]

[编辑] 成员对象

成员名称 定义
c (私有) containers 类型的对象
((仅供说明的成员对象*)
compare (私有) key_compare 类型的比较函数对象
((仅供说明的成员对象*)

[编辑] 成员函数

构造 flat_map
(公有成员函数) [编辑]
(析构函数)
(隐式声明)
销毁容器适配器中的每个元素
(公有成员函数)
将值赋值给容器适配器
(公有成员函数) [编辑]
元素访问
在边界检查的情况下访问指定的元素
(公有成员函数) [编辑]
访问或插入指定的元素
(公有成员函数) [编辑]
迭代器
返回指向开头的迭代器
(公有成员函数) [编辑]
返回指向结尾的迭代器
(公有成员函数) [编辑]
返回指向开头的反向迭代器
(公有成员函数) [编辑]
返回指向结尾的反向迭代器
(公有成员函数) [编辑]
容量
检查容器适配器是否为空
(公有成员函数) [编辑]
返回元素的数量
(公有成员函数) [编辑]
返回元素的最大可能数量
(公有成员函数) [编辑]
修改器
在原位构造元素
(公有成员函数) [编辑]
使用提示在原位构造元素
(公有成员函数) [编辑]
如果键不存在,则在原位插入;如果键存在,则不执行任何操作
(公有成员函数) [编辑]
插入元素
(公有成员函数) [编辑]
插入一系列元素
(公有成员函数) [编辑]
如果键已经存在,则插入元素或将元素赋值给当前元素
(公有成员函数) [编辑]
提取底层容器
(公有成员函数) [编辑]
替换底层容器
(公有成员函数) [编辑]
擦除元素
(公有成员函数) [编辑]
交换内容
(公有成员函数) [编辑]
清除内容
(公有成员函数) [编辑]
查找
查找具有特定键的元素
(公有成员函数) [编辑]
返回与特定键匹配的元素数量
(公有成员函数) [编辑]
检查容器是否包含具有特定键的元素
(公有成员函数) [编辑]
返回指向第一个 不小于 给定键的元素的迭代器
(公有成员函数) [编辑]
返回指向第一个 大于 给定键的元素的迭代器
(公有成员函数) [编辑]
返回与特定键匹配的元素范围
(公共成员函数) [编辑]
观察者
返回用于比较键的函数
(公共成员函数) [编辑]
返回用于比较类型为 value_type 的对象中的键的函数
(公共成员函数) [编辑]
直接访问底层键容器
(公共成员函数) [编辑]
直接访问底层值容器
(公共成员函数) [编辑]

[编辑] 非成员函数

按字典顺序比较两个 flat_map 的值
(函数模板) [编辑]
专门化 std::swap 算法
(函数模板) [编辑]
删除满足特定条件的所有元素
(函数模板) [编辑]

[编辑] 辅助类

专门化 std::uses_allocator 类型特征
(类模板专门化) [编辑]

[编辑] 标签

指示范围的元素是排序的且唯一的
(标签)[编辑]

[编辑] 推断指南

[编辑] 注释

成员类型 iteratorconst_iterator 可能是对相同类型的别名。这意味着使用这两个类型作为参数类型定义一对函数重载可能会违反 单定义规则。由于 iterator 可转换为 const_iterator,因此可以使用具有 const_iterator 作为参数类型的单个函数。


功能测试 Std 功能
__cpp_lib_flat_map 202207L (C++23) std::flat_mapstd::flat_multimap

[编辑] 示例

[编辑] 参见

通过适配两个容器,提供一个按键排序的键值对集合
(类模板) [编辑]
按键排序的键值对集合,键是唯一的
(类模板) [编辑]
按键哈希的键值对集合,键是唯一的
(类模板) [编辑]