Namespaces
Variants

std:: unordered_multimap

From cppreference.net
定义于头文件 <unordered_map>
template <

class Key,
class T,
class Hash = std:: hash < Key > ,
class KeyEqual = std:: equal_to < Key > ,
class Allocator = std:: allocator < std:: pair < const Key, T >>

> class unordered_multimap ;
(1) (C++11 起)
namespace pmr {

template <
class Key,
class T,
class Hash = std:: hash < Key > ,
class Pred = std:: equal_to < Key >
> using unordered_multimap =
std :: unordered_multimap < Key, T, Hash, Pred,
std:: pmr :: polymorphic_allocator < std:: pair < const Key, T >>> ;

}
(2) (C++17 起)

std::unordered_multimap 是一种无序关联容器,支持等价键(一个 unordered_multimap 可以包含多个相同键值的副本)并将另一种类型的值与键关联。unordered_multimap 类支持前向迭代器。查找、插入和删除操作具有平均常数时间复杂度。

在内部,元素不会按特定顺序排序,而是被组织到多个桶中。元素被放入哪个桶完全取决于其键的哈希值。这样可以快速访问单个元素,因为一旦计算出哈希值,它就直接指向元素所在的精确桶。

此容器的迭代顺序无需保持稳定(例如,无法使用 std::equal 比较两个 std::unordered_multimap ),但每个键值比较 等价 (以 key_eq() 作为比较器时相等)的元素组会在迭代顺序中形成连续的子范围,该子范围也可通过 equal_range() 访问。

std::unordered_multimap 满足 Container AllocatorAwareContainer UnorderedAssociativeContainer 的要求。

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

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

(自 C++26 起)

目录

模板参数

成员类型

类型 定义
key_type Key
mapped_type T
value_type std:: pair < const Key, T >
size_type 无符号整数类型(通常为 std::size_t
difference_type 有符号整数类型(通常为 std::ptrdiff_t
hasher Hash
key_equal KeyEqual
allocator_type Allocator
reference value_type &
const_reference const value_type &
pointer std:: allocator_traits < Allocator > :: pointer
const_pointer std:: allocator_traits < Allocator > :: const_pointer
iterator LegacyForwardIterator ConstexprIterator (C++26 起) 指向 value_type
const_iterator LegacyForwardIterator ConstexprIterator (C++26 起) 指向 const value_type
local_iterator 迭代器类型,其类别、值类型、差值类型、指针类型
和引用类型与 iterator 相同。此迭代器
可用于遍历单个桶但不能跨桶遍历
const_local_iterator 迭代器类型,其类别、值类型、差值类型、指针类型
和引用类型与 const_iterator 相同。此迭代器
可用于遍历单个桶但不能跨桶遍历
node_type (C++17 起) 节点句柄 的特化,表示容器节点

成员函数

构造 unordered_multimap
(公开成员函数)
销毁 unordered_multimap
(公开成员函数)
为容器赋值
(公开成员函数)
返回关联的分配器
(公开成员函数)
迭代器
返回指向起始位置的迭代器
(公开成员函数)
返回指向末尾的迭代器
(公开成员函数)
容量
检查容器是否为空
(公开成员函数)
返回元素数量
(公开成员函数)
返回可能容纳的最大元素数
(公开成员函数)
修饰符
清空内容
(公开成员函数)
插入元素 或节点 (C++17 起)
(公开成员函数)
插入元素范围
(公开成员函数)
原地构造元素
(公开成员函数)
使用提示原位构造元素
(公开成员函数)
删除元素
(公开成员函数)
交换内容
(公开成员函数)
(C++17)
从容器中提取节点
(公开成员函数)
(C++17)
从另一容器接合节点
(公开成员函数)
查找
返回匹配特定键的元素数量
(公开成员函数)
根据特定键查找元素
(公开成员函数)
(C++20)
检查容器是否包含具有特定键的元素
(公开成员函数)
返回匹配特定键的元素范围
(公开成员函数)
桶接口
返回指向指定桶起始位置的迭代器
(公开成员函数)
返回指向指定桶末尾的迭代器
(公开成员函数)
返回桶的数量
(公开成员函数)
返回最大桶数量
(公开成员函数)
返回特定桶中的元素数量
(公开成员函数)
返回特定键对应的桶
(公开成员函数)
哈希策略
返回每个桶的平均元素数量
(公开成员函数)
管理每个桶的最大平均元素数量
(公开成员函数)
预留至少指定数量的桶并重新生成哈希表
(公开成员函数)
为至少指定数量的元素预留空间并重新生成哈希表
(公开成员函数)
观察器
返回用于哈希键的函数
(公开成员函数)
返回用于比较键是否相等的函数
(公开成员函数)

非成员函数

(C++11) (C++11) (removed in C++20)
比较 unordered_multimap 中的值
(函数模板)
特化 std::swap 算法
(函数模板)
擦除满足特定条件的所有元素
(函数模板)

推导指引

(C++17 起)

注释

功能测试 标准 功能
__cpp_lib_containers_ranges 202202L (C++23) 容器的范围构造与插入
__cpp_lib_constexpr_unordered_map 202502L (C++26) constexpr std::unordered_multimap

示例

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 适用版本 发布行为 正确行为
LWG 2050 C++11 reference const_reference pointer
const_pointer 的定义基于 allocator_type
基于 value_type
std::allocator_traits

另请参阅

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