std::multimap - cppreference.com
来自cppreference.com
| 在标头 |
||
template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T>> > class multimap; |
(1) | |
namespace pmr { template< class Key, class T, class Compare = std::less<Key> > using multimap = std::multimap<Key, T, Compare, std::pmr::polymorphic_allocator<std::pair<const Key, T>>>; } |
(2) | (C++17 起) |
multimap 是关联容器,含有键值对的已排序列表,同时容许多个元素拥有同一键。按照应用到键的比较函数 Compare 排序。搜索、插入和移除操作拥有对数复杂度。
std::multimap 的迭代器以键的非降序进行迭代,其中非降序由构造时所用的比较函数定义。就是说,给定
m,为std::multimapit_l和it_r,到m的可解引用迭代器,其中it_l < it_r。
m.value_comp()(*it_r, *it_l) == false(使用默认比较函数时为从小到大)。
|
拥有等价键的键值对的顺序就是插入顺序,且不会更改。 |
(C++11 起) |
标准库使用比较 (Compare) 规定时,均以等价关系确定唯一性,如比较 (Compare) 中所述。不精确地说,如果两个对象 a 与 b 相互比较不小于对方:!comp(a, b) && !comp(b, a),那么认为它们等价。
std::multimap 满足容器 (Container) 、知分配器容器 (AllocatorAwareContainer) 、关联容器 (AssociativeContainer) 和可逆容器 (ReversibleContainer) 的要求。
|
然而,定义一个 |
(C++26 起) |
模板形参
成员类型
成员类
成员函数
构造 multimap (公开成员函数) [编辑] | |
析构 multimap (公开成员函数) [编辑] | |
| 将值赋给容器 (公开成员函数) [编辑] | |
| 返回关联的分配器 (公开成员函数) [编辑] | |
迭代器 | |
(C++11) |
返回指向起始的迭代器 (公开成员函数) [编辑] |
(C++11) |
返回指向末尾的迭代器 (公开成员函数) [编辑] |
(C++11) |
返回指向起始的逆向迭代器 (公开成员函数) [编辑] |
(C++11) |
返回指向末尾的逆向迭代器 (公开成员函数) [编辑] |
容量 | |
| 检查容器是否为空 (公开成员函数) [编辑] | |
| 返回元素数 (公开成员函数) [编辑] | |
| 返回可容纳的最大元素数 (公开成员函数) [编辑] | |
修改器 | |
| 清除内容 (公开成员函数) [编辑] | |
| 插入元素或节点(C++17 起) (公开成员函数) [编辑] | |
(C++23) |
插入元素范围 (公开成员函数) [编辑] |
(C++11) |
原位构造元素 (公开成员函数) [编辑] |
(C++11) |
使用提示原位构造元素 (公开成员函数) [编辑] |
| 擦除元素 (公开成员函数) [编辑] | |
| 交换内容 (公开成员函数) [编辑] | |
(C++17) |
提取容器中的节点 (公开成员函数) [编辑] |
(C++17) |
从另一容器合并节点 (公开成员函数) [编辑] |
查找 | |
| 返回匹配特定键的元素数量 (公开成员函数) [编辑] | |
| 寻找带有特定键的元素 (公开成员函数) [编辑] | |
(C++20) |
检查容器是否含有带特定键的元素 (公开成员函数) [编辑] |
| 返回匹配特定键的元素范围 (公开成员函数) [编辑] | |
| 返回指向首个不小于 给定键的元素的迭代器 (公开成员函数) [编辑] | |
| 返回指向首个大于 给定键的元素的迭代器 (公开成员函数) [编辑] | |
观察器 | |
| 返回用于比较键的函数 (公开成员函数) [编辑] | |
返回用于比较 value_type 类型的对象中的键的函数 (公开成员函数) [编辑] | |
非成员函数
注解
| 功能特性测试宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | 容器的范围构造和插入 |
__cpp_lib_constexpr_map |
202502L |
(C++26) | constexpr std::multimap
|
示例
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 230 | C++98 | Key 不需要满足可复制构造 (CopyConstructible) (因此不保证能构造 Key 类型的键)
|
Key 也需要满足可复制构造 (CopyConstructible) |