C++ 标准模板库 - <unordered_map>
unordered_map 简介
无序映射是像字典一样的数据结构。 它是(键,值)对的序列,其中只有单个值与每个唯一键相关联。 它通常被称为关联数组。它可以根据它们的键快速检索单个元素。 它还实现了直接访问运算符(下标运算符[]),它允许使用其键值作为参数直接访问映射值。
无序映射不会根据键或映射值按任何特定顺序对其元素进行排序,而是根据其哈希值组织成桶,以允许直接通过键值快速访问各个元素。
在通过键访问单个元素时,无序映射比映射执行得更好。 但是对于范围迭代,它们的性能相当低。
定义
下面是来自 <unordered_map> 头文件的 std::unordered_map 的定义
template < class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator< pair<const Key,T> > > class unordered_map;
参数
Key − Key 的类型。
T − 映射值的类型。
Hash − 一元函数对象类型,它以 key 类型的对象作为参数并基于它返回 size_t 类型的唯一值。
Pred − key type的两个参数并返回布尔值的二进制谓词。
Alloc − 分配器对象的类型。
T 可以替换为任何其他数据类型,包括用户定义的类型。
成员类型
以下成员类型可以用作成员函数的参数或返回类型。
序号 | 成员类型 | 定义 |
---|---|---|
1 | key_type | Key (First parameter of the template) |
2 | mapped_type | T (Second parameter of the template) |
3 | value_type | pair<const key_type,mapped_type> |
4 | hasher | The third template parameter (defaults to: hash<key_type>) |
5 | key_equal | The fourth template parameter (defaults to: equal_to<key_type>) |
6 | allocator_type | Alloc (Fifth parameter of the template) |
7 | reference | value_type& |
8 | const_reference | const value_type& |
9 | pointer | allocator_traits<Alloc>::pointer |
10 | const_pointer | allocator_traits<Alloc>::const_pointer |
11 | iterator | A forward iterator to value_type value_type |
12 | const_iterator | A forward iterator to const value_type value_type |
13 | local_iterator | A forward iterator to value_type |
14 | const_local_iterator | A forward iterator to const value_type |
15 | difference_type | ptrdiff_t |
16 | size_type | size_t |
<unordered_map> 中的函数
下面是来自 <unordered_map> 标头的所有方法的列表。
构造函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_map::unordered_map default constructor 构造一个具有零个元素的空 unordered_map。 |
2 | unordered_map::unordered_map copy constructor 构造一个 unordered_map,其中包含现有 unordered_map 中存在的每个元素的副本。 |
3 | unordered_map::unordered_map move constructor 使用移动语义构造具有 other 内容的 unordered_map。 |
4 | unordered_map::unordered_map range constructor 构造一个具有与 first 到 last 范围内的元素一样多的元素的 unordered_map。 |
5 | unordered_map::unordered_map initializer_list constructor 从初始化列表构造一个 unordered_map。 |
析构函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_map::~unordered_map
通过释放内存来销毁 unordered_map 对象。 |
成员函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_map::at
返回对与键 k 关联的映射值的引用。 |
2 | unordered_map::begin container iterator 返回一个迭代器,它引用映射的第一个元素。 |
3 | unordered_map::begin bucket iterator 返回一个迭代器,指向它的一个桶中的第一个元素。 |
4 | unordered_map::bucket
返回带有 k 键的元素所在的桶号。 |
5 | unordered_map::bucket_count
返回 unordered_map 容器中的桶数。 |
6 | unordered_map::bucket_size
返回第 nth 桶中存在的元素数。 |
7 | unordered_map::cbegin container iterator 返回一个常量迭代器,它引用 unordered_map 的第一个元素。 |
8 | unordered_map::cbegin bucket iterator 返回一个常量迭代器,指向它的一个桶中的第一个元素。 |
9 | unordered_map::cend container iterator 返回一个常量迭代器,它指向 unordered_map 的 past-the-end 元素。 |
10 | unordered_map::cend bucket iterator 返回一个常量迭代器,它指向其中一个桶中的 past-the-end 元素。 |
11 | unordered_map::clear
通过删除所有元素来销毁 unordered_map,并将 unordered_map 的大小设置为 zero。 |
12 | unordered_map::count
返回与键 k 关联的映射值的数量。 |
13 | unordered_map::emplace
通过插入新元素来扩展容器。 |
14 | unordered_map::emplace_hint
使用提示作为元素的位置在 unordered_map 中插入一个新元素。 |
15 | unordered_map::empty
测试 unordered_map 是否为空。 |
16 | unordered_map::end container iterator 返回一个迭代器,它指向 unordered_map 中的 past-the-end 元素。 |
17 | unordered_map::end bucket iterator 返回一个迭代器,它指向其中一个桶中的 past-the-end 元素。 |
18 | unordered_map::equal
返回与特定键匹配的元素范围。 |
19 | unordered_map::erase position version 从 position 移除 unordered_map 的单个元素。 |
20 | unordered_map::erase key version 删除与键 k 关联的映射值。 |
21 | unordered_map::erase range version 从 unordered_map 中删除元素范围。 |
22 | unordered_map::find
查找与键 k 关联的元素。 |
23 | unordered_map::get_allocator
返回与 unordered_map 关联的分配器。 |
24 | unordered_map::hash_function
计算 unordered_map 容器使用的哈希函数对象。 |
25 | unordered_map::insert
通过在 unordered_map 中插入新元素来扩展容器。 |
26 | unordered_map::insert move version 通过在 unordered_map 中插入新元素来扩展容器。 |
27 | unordered_map::insert hint version 通过在 unordered_map 中插入新元素来扩展容器。 |
28 | unordered_map::insert move and hint version 通过插入新元素来扩展 unordered_map。 |
29 | unordered_map::insert range version 通过在 unordered_map 中插入新元素来扩展容器。 |
30 | unordered_map::insert initializer_list version 通过从初始化列表中插入新元素来扩展映射。 |
31 | unordered_map::key_eq
返回比较键是否相等的函数。 |
32 | unordered_map::load_factor
返回 unordered_map 容器的当前负载因子。 |
33 | unordered_map::max_bucket_count
返回 unordered_map 容器可以拥有的最大桶数。 |
34 | unordered_map::max_load_factor get version 返回 unordered_map 容器的当前最大负载因子。 |
35 | unordered_map::max_load_factor set version 为 unordered_map 容器分配新的负载因子。 |
36 | unordered_map::max_size
返回 unordered_map 可以容纳的最大元素数。 |
37 | unordered_map::operator= copy version 通过替换旧内容并将新内容分配给 unordered_map,并在必要时修改大小。 |
38 | unordered_map::operator= move version 将一个 unordered_map 的内容移动到另一个中,并在必要时修改大小。 |
39 | unordered_map::operator= initializer_list version 将初始值设定项列表中的元素复制到 unordered_map。 |
40 | unordered_map::operator[]
如果键 k 匹配容器中的元素,则方法返回对该元素的引用。 |
41 | unordered_map::operator[] move version 如果键 k 匹配容器中的元素,则方法返回对该元素的引用。 |
42 | unordered_map::rehash
将容器中的桶数设置为 n 或更多。 |
43 | unordered_map::reserve
将容器中的桶数设置为最适合包含至少 n 个元素。 |
44 | unordered_map::size
返回 unordered_map 中存在的元素数。 |
45 | unordered_map::swap
将第一个 unordered_map 的内容与另一个交换。 |
非成员重载函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_map::operator==
测试两个 unordered_map 是否相等。 |
2 | unordered_map::operator!=
测试两个 unordered_map 是否相等。 |
3 | unordered_map::swap
将第一个 unordered_map 的内容与另一个交换。 |
unordered_multimap 简介
Unordered_multimap 是类似字典的数据结构。 它是(key, value)键值对的序列,其中不同的元素可以具有等效的键。 具有等效键的元素在同一个桶中组合在一起,并且 equal_range 迭代器 可以遍历所有元素。
Unordered_multimap 不会根据键或映射值按任何特定顺序对其元素进行排序,而是根据其哈希值组织成桶,以允许直接通过键值快速访问单个元素。
定义
下面是来自 <unordered_map> 头文件的 std::unordered_multimap 的定义
template < class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator< pair<const Key,T> > > class unordered_multimap;
参数
Key − key 的类型。
T − 映射值的类型。
Hash − 一元函数对象类型,它以 key 类型的对象作为参数并基于它返回 size_t 类型的唯一值。
Pred − key type的两个参数并返回布尔值的二进制谓词。
Alloc − 分配器对象的类型。
T 可以替换为任何其他数据类型,包括用户定义的类型。
成员类型
以下成员类型可以用作成员函数的参数或返回类型。
序号 | 成员类型 | 定义 |
---|---|---|
1 | key_type | Key (First parameter of the template) |
2 | mapped_type | T (Second parameter of the template) |
3 | value_type | pair<const key_type,mapped_type> |
4 | hasher | The third template parameter (defaults to: hash<key_type>) |
5 | key_equal | The fourth template parameter (defaults to: equal_to<key_type>) |
6 | allocator_type | Alloc (Fifth parameter of the template) |
7 | reference | value_type& |
8 | const_reference | const value_type& |
9 | pointer | allocator_traits<Alloc>::pointer |
10 | const_pointer | allocator_traits<Alloc>::const_pointer |
11 | iterator | A forward iterator to value_type value_type |
12 | const_iterator | A forward iterator to const value_type value_type |
13 | local_iterator | A forward iterator to value_type |
14 | const_local_iterator | A forward iterator to const value_type |
15 | difference_type | ptrdiff_t |
16 | size_type | size_t |
<unordered_multimap> 中的函数
下面是来自 <unordered_map> 标头的所有方法的列表。
构造函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_multimap::unordered_multimap() default constructor 构造一个具有零个元素的空 unordered_multimap。 |
2 | unordered_multimap::unordered_multimap() copy constructor 构造一个 unordered_multimap,其中包含现有 unordered_multimap 中存在的每个元素的副本。 |
3 | unordered_multimap::unordered_multimap() move constructor 使用移动语义构造具有 other 内容的 unordered_multimap。 |
4 | unordered_multimap::unordered_multimap() range constructor 构造一个 unordered_multimap,其元素数量在 first 到 last 的范围内。 |
5 | unordered_multimap::unordered_multimap() initializer_list constructor 从初始化列表构造一个 unordered_multimap。 |
析构函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_multimap::~unordered_multimap()
通过释放内存来销毁 unordered_multimap 对象。 |
成员函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_multimap::begin() container iterator 返回一个迭代器,它引用 unordered_multimap 的第一个元素。 |
2 | unordered_multimap::begin() bucket iterator 返回一个迭代器,指向它的一个桶中的第一个元素。 |
3 | unordered_multimap::bucket()
返回带有 k 键的元素所在的桶号。 |
4 | unordered_multimap::bucket_count()
返回 unordered_multimap 容器中存在的桶数。 |
5 | unordered_multimap::bucket_size()
返回第 nth 桶中存在的元素数。 |
6 | unordered_multimap::cbegin() container iterator 返回一个常量迭代器,它引用 unordered_multimap 的第一个元素。 |
7 | unordered_multimap::cbegin() bucket iterator 返回一个常量迭代器,指向它的一个桶中的第一个元素。 |
8 | unordered_multimap::cend() container iterator 返回一个常量迭代器,它指向 unordered_multimap 的 past-the-end 元素。 |
9 | unordered_multimap::cend() bucket iterator 返回一个常量迭代器,它指向其中一个桶中的 past-the-end 元素。 |
10 | unordered_multimap::clear()
通过删除所有元素来销毁 unordered_multimap,并将 unordered_multimap 的大小设置为 zero。 |
11 | unordered_multimap::count()
返回与键 k 关联的映射值的数量。 |
12 | unordered_multimap::emplace()
通过插入新元素来扩展容器。 |
13 | unordered_multimap::emplace_hint()
使用提示作为元素的位置在 unordered_multimap 中插入新元素。 |
14 | unordered_multimap::empty()
测试 unordered_multimap 是否为空。 |
15 | unordered_multimap::end() container iterator 返回一个迭代器,它指向 unordered_multimap 中的 past-the-end 元素。 |
16 | unordered_multimap::end() bucket iterator 返回一个迭代器,它指向其中一个桶中的 past-the-end 元素。 |
17 | unordered_multimap::equal_range()
返回与特定键匹配的元素范围。 |
18 | unordered_multimap::erase() position version 从 position 移除 unordered_multimap 的单个元素。 |
19 | unordered_multimap::erase() key version 删除与键 k 关联的映射值。 |
20 | unordered_multimap::erase() range version 从 unordered_multimap 中删除元素范围。 |
21 | unordered_multimap::find()
查找与键 k 关联的元素。 |
22 | unordered_multimap::get_allocator()
返回与 unordered_multimap 关联的分配器。 |
23 | unordered_multimap::hash_function()
计算 unordered_multimap 容器使用的哈希函数对象。 |
24 | unordered_multimap::insert() value version 通过在 unordered_multimap 中插入新元素来扩展容器。 |
25 | unordered_multimap::insert() move version 通过插入新元素来扩展 unordered_multimap。 |
26 | unordered_multimap::insert() hint version 通过在 unordered_multimap 中插入新元素来扩展容器。 |
27 | unordered_multimap::insert() hint move version 通过使用移动语义在 unordered_multimap 中插入新元素来扩展容器。 |
28 | unordered_multimap::insert() range version 通过在 unordered_multimap 中插入新元素来扩展容器。 |
29 | unordered_multimap::insert() initializer_list version 通过从初始化列表中插入新元素来扩展 unordered_multimap。 |
30 | unordered_multimap::key_eq()
返回比较键是否相等的函数。 |
31 | unordered_multimap::load_factor()
返回 unordered_multimap 容器的当前负载因子。 |
32 | unordered_multimap::max_bucket_count()
返回 unordered_multimap 容器可以拥有的最大桶数。 |
33 | unordered_multimap::max_load_factor() get version 返回 unordered_multimap 容器的当前最大负载因子。 |
34 | unordered_multimap::max_load_factor() set version 为 unordered_multimap 容器分配新的负载因子。 |
35 | unordered_multimap::max_size()
返回 unordered_multimap 可以容纳的最大元素数。 |
36 | unordered_multimap::operator=() copy version 通过替换旧内容并将新内容分配给 unordered_multimap 并在必要时修改大小。 |
37 | unordered_multimap::operator=() move version 将一个 unordered_multimap 的内容移动到另一个中,并在必要时修改大小。 |
38 | unordered_multimap::operator=() initializer_list version 将初始值设定项列表中的元素复制到 unordered_multimap。 |
39 | unordered_multimap::rehash()
将容器中的桶数设置为 n 或更多。 |
40 | unordered_multimap::reserve()
将容器中的桶数设置为最适合包含至少 n 个元素。 |
41 | unordered_multimap::size()
返回 unordered_multimap 中存在的元素数。 |
42 | unordered_multimap::swap()
将第一个 unordered_multimap 的内容与另一个交换。 |
非成员重载函数
序号 | 方法 & 说明 |
---|---|
1 | unordered_multimap::operator==()
测试两个 unordered_multimap 是否相等。 |
2 | unordered_multimap::operator!=()
测试两个 unordered_multimap 是否相等。 |
3 | unordered_multimap::swap()
将第一个 unordered_multimap 的内容与另一个交换。 |