Cpp Standard Library 简明教程
C++ Library - <unordered_map>
Introduction to unordered_map
无序映射类似字典的数据结构。它是一个 (键值对) 对序列,其中每个唯一键仅关联有单个值。它通常被称为关联数组。它能够基于元素的键快速检索各个元素。它还实现了直接访问操作符 (下标操作符 []),允许使用键值作为参数直接访问已映射值。
无序映射不会根据元素的键或已映射值按照任何特定顺序对元素进行排序,而是根据哈希值按桶组织,以直接通过键值快速访问各个元素。
无序映射在通过键访问各个元素时性能优于映射。但对于范围迭代,其性能相当低下。
Definition
以下是来自 <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;
Parameters
-
Key − 键的类型。
-
T − 映射值类型。
-
Hash − 单目函数对象类型,它将 key type 类型的对象作为参数,并根据它返回一个唯一的 size_t 类型的 value。
-
Pred − 一个二元谓词,它有两个 key type 类型的参数,并返回一个 bool。
-
Alloc − 分配器对象类型。
Member types
以下成员类型可作为参数或返回类型,由成员函数使用。
Sr.No. |
Member types |
Definition |
1 |
key_type |
Key (模板的第一个参数) |
2 |
mapped_type |
T (模板的第二个参数) |
3 |
value_type |
pair<const key_type,mapped_type> |
4 |
hasher |
第三个模板参数 (默认为:hash<key_type>) |
5 |
key_equal |
第四个模板参数(默认值:equal_to<key_type>) |
6 |
allocator_type |
Alloc(该模板的第五个参数) |
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 |
前进迭代器至 value_type 值类型 |
12 |
const_iterator |
前进迭代器至 const value_type 值类型 |
13 |
local_iterator |
前进迭代器至 value_type 值类型 |
14 |
const_local_iterator |
前进迭代器至 const value_type 值类型 |
15 |
difference_type |
ptrdiff_t |
16 |
size_type |
size_t |
Functions from <unordered_map>
以下是来自 <unordered_map> 头的所有方法列表。
Constructors
Sr.No. |
Method & Description |
1 |
unordered_map::unordered_map 默认构造函数构造一个空 unordered_map,其中不含任何元素。 |
2 |
unordered_map::unordered_map 复制构造函数构造一个 unordered_map,其中包含现有 unordered_map 中存在的所有元素的副本。 |
3 |
unordered_map::unordered_map 移动构造函数构造一个 unordered_map,其中包含使用移动语义的其他元素的内容。 |
4 |
unordered_map::unordered_map 范围构造函数构造一个 unordered_map,其中包含与第一项至最后一项的范围内一样多的元素。 |
5 |
unordered_map::unordered_map 初始化程序列表构造函数从初始化程序列表构造一个 unordered_map。 |
Destructor
Sr.No. |
Method & Description |
1 |
unordered_map::~unordered_map 通过取消配置其内存来销毁 unordered_map 对象。 |
Member functions
Sr.No. |
Method & Description |
1 |
unordered_map::at 返回与 key k 关联的映射值的引用。 |
2 |
unordered_map::begin 容器迭代器返回一个迭代器,该迭代器指向该 map 的第一个元素。 |
3 |
unordered_map::begin 存储桶迭代器返回一个迭代器,该迭代器指向其某一个存储桶中的元素。 |
4 |
unordered_map::bucket 返回位于带有 key k 元素的存储桶的编号。 |
5 |
unordered_map::bucket_count 返回 unordered_map 容器中的存储桶数量。 |
6 |
unordered_map::bucket_size 返回第 n 个存储桶中元素的数量。 |
7 |
unordered_map::cbegin 容器迭代器返回指向无序映射的第一个元素的常量迭代器。 |
8 |
unordered_map::cbegin 桶迭代器返回指向其一个桶中的第一个元素的常量迭代器。 |
9 |
unordered_map::cend 容器迭代器返回指向无序映射的结束元素之后位置的常量迭代器。 |
10 |
unordered_map::cend 桶迭代器返回指向其一个桶中的结束元素之后位置的常量迭代器。 |
11 |
unordered_map::clear 通过移除所有元素来摧毁无序映射,并将无序映射的长度设为 0。 |
12 |
unordered_map::count 返回与键 k 关联的映射值的数量。 |
13 |
unordered_map::emplace 通过插入新元素来扩展容器。 |
14 |
unordered_map::emplace_hint 使用提示作为元素位置在无序映射中插入新元素。 |
15 |
unordered_map::empty 测试无序映射是否为空。 |
16 |
unordered_map::end 容器迭代器返回指向无序映射中的结束元素之后位置的迭代器。 |
17 |
unordered_map::end 桶迭代器返回指向其一个桶中的结束元素之后位置的迭代器。 |
18 |
unordered_map::equal 返回匹配特定键的元素范围。 |
19 |
unordered_map::erase 位置版本从该位置移除无序映射的一个元素。 |
20 |
unordered_map::erase 键版本移除与键 k 关联的映射值。 |
21 |
unordered_map::erase 范围版本从无序映射中移除元素范围。 |
22 |
unordered_map::find 查找与键 k 关联的一个元素。 |
23 |
unordered_map::get_allocator 返回与无序映射关联的分配器。 |
24 |
unordered_map::hash_function 计算由该无序映射容器使用的哈希函数对象。 |
25 |
unordered_map::insert 通过在无序映射中插入新元素来扩展容器。 |
26 |
unordered_map::insert move versionExtends container by inserting new element in unordered_map。 |
27 |
unordered_map::insert hint versionExtends conta iner by inserting new element in unordered_map。 |
28 |
unordered_map::insert move and hint versionExtends unordered_map by inserting new element。 |
29 |
unordered_map::insert range versionExtends container by inserting new elements in the unordered_map。 |
30 |
unordered_map::insert initializer_list versionExtends map by inserting new element from initializer list。 |
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 将 initializer list 中的元素复制到 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内容和另一个。 |
Non-member overloaded functions
Sr.No. |
Method & Description |
1 |
unordered_map::operator== 测试两个unordered_map是否相等。 |
2 |
unordered_map::operator!= 测试两个unordered_map是否相等。 |
3 |
unordered_map::swap 交换第一个unordered_map内容和另一个。 |
Introduction to unordered_multimap
Unordered_multimap是一个类字典的数据结构。这是一个(键值)对序列,其中不同的元素可能具有相同的键。具有相同键的元素分组在同一个桶中,分割方式使得一个equal_range迭代器可以对所有元素进行迭代。
Unordered_multimap不按键或映射值对元素进行特殊的顺序排列,而是根据哈希值按桶组织,以通过键值直接快速访问各个元素。
Definition
以下是<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;
Parameters
-
Key − 键的类型。
-
T − 映射值类型。
-
Hash − 单目函数对象类型,它将 key type 类型的对象作为参数,并根据它返回一个唯一的 size_t 类型的 value。
-
Pred − 一个二元谓词,它有两个 key type 类型的参数,并返回一个 bool。
-
Alloc − Allocator对象类型。T 可以替换为任何其他数据类型,包括用户定义类型。
Member types
以下成员类型可作为参数或返回类型,由成员函数使用。
Sr.No. |
Member types |
Definition |
1 |
key_type |
Key (模板的第一个参数) |
2 |
mapped_type |
T (模板的第二个参数) |
3 |
value_type |
pair<const key_type,mapped_type> |
4 |
hasher |
第三个模板参数 (默认为:hash<key_type>) |
5 |
key_equal |
第四个模板参数(默认值:equal_to<key_type>) |
6 |
allocator_type |
Alloc(该模板的第五个参数) |
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 |
前进迭代器至 value_type 值类型 |
12 |
const_iterator |
前进迭代器至 const value_type 值类型 |
13 |
local_iterator |
前进迭代器至 value_type 值类型 |
14 |
const_local_iterator |
前进迭代器至 const value_type 值类型 |
15 |
difference_type |
ptrdiff_t |
16 |
size_type |
size_t |
Functions from <unordered_multimap>
以下是来自 <unordered_map> 头的所有方法列表。
Constructors
Sr.No. |
Method & Description |
1 |
unordered_multimap::unordered_multimap() 默认构造函数构造一个空unordered_multimap,其中没有元素。 |
2 |
unordered_multimap::unordered_multimap() 复制构造函数使用现有unordered_multimap中存在的每个元素的副本构造一个unordered_multimap。 |
3 |
unordered_multimap::unordered_multimap() 移动构造函数使用其他内容使用移动语义构造一个unordered_multimap。 |
4 |
unordered_multimap::unordered_multimap() 范围构造函数使用从第一个到最后一个范围中的尽可能多的元素构造一个unordered_multimap。 |
5 |
unordered_multimap::unordered_multimap() 初始化表构造函数使用初始化表构造一个unordered_multimap。 |
Destructor
Sr.No. |
Method & Description |
1 |
unordered_multimap::~unordered_multimap() 通过释放内存销毁unordered_multimap的对象。 |
Member functions
Sr.No. |
Method & Description |
1 |
unordered_multimap::begin() 容器迭代器返回一个引用unordered_mulitmap的第一个元素的迭代器。 |
2 |
unordered_multimap::begin() 桶迭代器返回一个指向其桶中第一个元素的迭代器。 |
3 |
unordered_multimap::bucket() 返回键为k的元素所在的桶号。 |
4 |
unordered_multimap::bucket_count() 返回unordered_multimap容器中存在的桶数。 |
5 |
unordered_multimap::bucket_size() 返回第n个桶中存在的元素数。 |
6 |
unordered_multimap::cbegin() 容器迭代器返回一个常量迭代器,它指向无序多重映射的第一个元素。 |
7 |
unordered_multimap::cbegin() 存储迭代器返回一个常量迭代器,它指向其中一个存储桶的第一个元素。 |
8 |
unordered_multimap::cend() 容器迭代器返回一个常量迭代器,它指向无序多重映射的末尾元素。 |
9 |
unordered_multimap::cend() 存储迭代器返回一个常量迭代器,它指向其中一个存储桶的末尾元素。 |
10 |
unordered_multimap::clear() 通过删除所有元素并将其大小设置为零来销毁无序多重映射。 |
11 |
unordered_multimap::count() 返回与键 k 关联的映射值的个数。 |
12 |
unordered_multimap::emplace() 通过插入新元素扩展容器。 |
13 |
unordered_multimap::emplace_hint() 使用提示作为元素的位置在无序多重映射中插入新元素。 |
14 |
unordered_multimap::empty() 测试无序多重映射是否为空。 |
15 |
unordered_multimap::end() 容器迭代器返回一个迭代器,它指向无序多重映射的末尾元素。 |
16 |
unordered_multimap::end() 存储迭代器返回一个迭代器,它指向其中一个存储桶的末尾元素。 |
17 |
unordered_multimap::equal_range() 返回与特定键匹配的元素范围。 |
18 |
unordered_multimap::erase() 从位置中删除无序多重映射的单个元素。 |
19 |
unordered_multimap::erase() 删除与键 k 关联的映射值。 |
20 |
unordered_multimap::erase() 从无序多重映射中删除元素范围。 |
21 |
unordered_multimap::find() 找到与键 k 关联的元素。 |
22 |
unordered_multimap::get_allocator() 返回与无序多重映射关联的分配器。 |
23 |
unordered_multimap::hash_function() 计算无序多重映射容器使用的哈希函数对象。 |
24 |
unordered_multimap::insert() 通过在无序多重映射中插入新元素来扩展容器。 |
25 |
unordered_multimap::insert() 移动版本通过插入新元素扩展 unordered_multimap。 |
26 |
unordered_multimap::insert() 提示版本通过在 unordered_multimap 中插入新元素扩展容器。 |
27 |
unordered_multimap::insert() 提示移动版本通过使用移动语义在 unordered_multimap 中插入新元素来扩展容器。 |
28 |
unordered_multimap::insert() 范围版本通过在 unordered_multimap 中插入新元素来扩展容器。 |
29 |
unordered_multimap::insert() initializer_list 版本通过从 initializer list 中插入新元素扩展 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 版本返回 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 的内容移动到另一个 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 的内容。 |
Non-member overloaded functions
Sr.No. |
Method & Description |
1 |
unordered_multimap::operator==() 测试两个 unordered_multimap 是否相等。 |
2 |
unordered_multimap::operator!=() 测试两个 unordered_multimap 是否相等。 |
3 |
unordered_multimap::swap() 将第一个无序多重映射的内容与另一个交换。 |