unordered_map 类

此模板类描述用于控制 std::pair<const Key, Ty> 类型的变长元素序列的对象。 序列由哈希函数弱排序,哈希函数将此序列分区到称为存储桶的有序序列集中。 在每个存储桶中,比较函数将确定任一元素对是否具有等效顺序。 每个元素存储两个对象,包括一个排序键和一个值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。 在最坏情况下,当所有元素位于一个存储桶中时,操作数量与序列中的元素数量成比例(线性时间)。 此外,插入元素不会使迭代器失效,移除元素仅会使指向已移除元素的迭代器失效。

template<class Key,
    class Ty,
    class Hash = std::hash<Key>,
    class Pred = std::equal_to<Key>,
    class Alloc = std::allocator<std::pair<const Key, Ty> > >
    class unordered_map;

参数

参数

说明

Key

键类型。

Ty

映射类型。

Hash

哈希函数对象类型。

Pred

相等比较函数对象类型。

Alloc

分配器类。

成员

类型定义

说明

unordered_map::allocator_type

用于管理存储的分配器的类型。

unordered_map::const_iterator

受控序列的常量迭代器的类型。

unordered_map::const_local_iterator

受控序列的常量存储桶迭代器的类型。

unordered_map::const_pointer

元素的常量指针的类型。

unordered_map::const_reference

元素的常量引用的类型。

unordered_map::difference_type

两个元素间的带符号距离的类型。

unordered_map::hasher

哈希函数的类型。

unordered_map::iterator

受控序列的迭代器的类型。

unordered_map::key_equal

比较函数的类型。

unordered_map::key_type

排序键的类型。

unordered_map::local_iterator

受控序列的存储桶迭代器的类型。

unordered_map::mapped_type

与每个键关联的映射值的类型。

unordered_map::pointer

元素的指针的类型。

unordered_map::reference

元素的引用的类型。

unordered_map::size_type

两个元素间的无符号距离的类型。

unordered_map::value_type

元素的类型。

成员函数

说明

unordered_map::at

查找具有指定键的元素。

unordered_map::begin

指定受控序列的开头。

unordered_map::bucket

获取键值的存储桶编号。

unordered_map::bucket_count

获取存储桶数。

unordered_map::bucket_size

获取存储桶的大小。

unordered_map::cbegin

指定受控序列的开头。

unordered_map::cend

指定受控序列的末尾。

unordered_map::clear

移除所有元素。

unordered_map::count

查找与指定键匹配的元素数。

unordered_map::emplace

添加就地构造的元素。

unordered_map::emplace_hint

添加就地构造的元素,附带提示。

unordered_map::empty

测试元素是否存在。

unordered_map::end

指定受控序列的末尾。

unordered_map::equal_range

查找与指定键匹配的范围。

unordered_map::erase

移除指定位置处的元素。

unordered_map::find

查找与指定键匹配的元素。

unordered_map::get_allocator

获取存储的分配器对象。

unordered_map::hash_function

获取存储的哈希函数对象。

unordered_map::insert

添加元素。

unordered_map::key_eq

获取存储的比较函数对象。

unordered_map::load_factor

对每个存储桶的平均元素数进行计数。

unordered_map::max_bucket_count

获取最大的存储桶数。

unordered_map::max_load_factor

获取或设置每个存储桶的最多元素数。

unordered_map::max_size

获取受控序列的最大大小。

unordered_map::rehash

重新生成哈希表。

unordered_map::size

对元素数进行计数。

unordered_map::swap

交换两个容器的内容。

unordered_map::unordered_map

构造容器对象。

运算符

说明

unordered_map::operator[]

查找或插入具有指定键的元素。

unordered_map::operator=

复制哈希表。

备注

对象通过调用两个存储对象,即一个 unordered_map::key_equal 类型的比较函数对象和一个 unordered_map::hasher 类型的哈希函数对象,对它控制的序列进行排序。 可以通过调用成员函数 unordered_map::key_eq() 访问第一个存储对象;通过调用成员函数 unordered_map::hash_function() 访问第二个存储对象。 具体而言,对于所有 Key 类型的值 X 和 Y,key_eq()(X, Y) 调用将仅在两个参数值拥有等效顺序时返回 true;hash_function()(keyval) 调用将生成 size_t 类型的值的分布。 与模板类 unordered_multimap 类 不同,模板类 unordered_map 的对象可确保 key_eq()(X, Y) 对于受控序列的任意两个元素始终为 false。(键是唯一的。)

此对象还存储最大加载因子,用于指定每个存储桶的元素的最大所需平均数量。 如果插入元素导致 unordered_map::load_factor() 超出最大加载因子,容器将增加存储桶的数量并根据需要重新生成哈希表。

受控序列中元素的实际顺序取决于哈希函数、比较函数、插入顺序、最大加载因子和存储桶的当前数量。 通常无法预测受控序列中的元素顺序。 但是,可以始终确保具有等效顺序的任何元素子集在受控序列中相邻。

对象通过 unordered_map::allocator_type 类型的存储分配器对象为其控制的序列分配并释放存储。 此分配器对象必须与 allocator 模板类的对象的外部接口相同。 请注意,已分配容器对象时,不复制存储的分配器对象。

要求

标头:<unordered_map>

命名空间: std

请参见

参考

<unordered_map>

C++ 标准库中的线程安全

标准模板库

概念

容器