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 - 密钥的类型。

  • T - 映射值的类型。

  • Hash - 一种一元函数对象类型,它采用key类型的对象作为参数,并基于它返回size_t类型的唯一值。

  • Pred - 一个二元谓词,其中两个键类型的参数并返回一个布尔值。

  • Alloc - 分配器对象的类型。

  • T 可以替换为任何其他数据类型,包括用户定义的类型。

会员类型

以下成员类型可以用作成员函数的参数或返回类型。

先生。 会员类型 定义
1 密钥类型 Key(模板的第一个参数)
2 映射类型 T(模板的第二个参数)
3 值类型 对<const key_type,mapped_type>
4 散列器 第三个模板参数(默认为:hash<key_type>)
5 键等于 第四个模板参数(默认为:equal_to<key_type>)
6 分配器类型 Alloc(模板的第五个参数)
7 参考 值类型&
8 常量引用 常量值类型&
9 指针 allocator_traits<分配>::指针
10 常量指针 allocator_traits<Alloc>::const_pointer
11 迭代器 value_type value_type的前向迭代器
12 常量迭代器 const value_type value_type的前向迭代器
13 本地迭代器 value_type 的前向迭代器
14 常量局部迭代器 const value_type 的前向迭代器
15 差异类型 ptrdiff_t
16 尺码类型 尺寸_t

来自 <unordered_map> 的函数

下面是 <unordered_map> 标头中所有方法的列表。

构造函数

先生。 方法及说明
1 unordered_map::unordered_map 默认构造函数

构造一个具有零个元素的空 unordered_map。

2 unordered_map::unordered_map 复制构造函数

使用现有 unordered_map 中存在的每个元素的副本构造一个 unordered_map。

3 unordered_map::unordered_map 移动构造函数

使用移动语义使用 other 的内容构造一个 unordered_map 。

4 unordered_map::unordered_map 范围构造函数

构造一个 unordered_map ,其元素数量与第一个最后一个范围内的元素数量相同。

5 unordered_map::unordered_map 初始化列表构造函数

从初始化列表构造一个 unordered_map。

析构函数

先生。 方法及说明
1 无序_映射::~无序_映射

通过释放内存来销毁 unordered_map 对象。

会员功能

先生。 方法及说明
1 无序_映射::at

返回对与键k关联的映射值的引用。

2 unordered_map::begin 容器迭代器

返回一个引用映射的第一个元素的迭代器。

3 unordered_map::begin 桶迭代器

返回一个迭代器,该迭代器指向其一个存储桶中的第一个元素。

4 无序_映射::桶

返回键为k的元素所在的桶号。

5 unordered_map::bucket_count

返回unordered_map容器中的桶数。

6 无序映射::桶大小

返回第 n个桶中存在的元素数量。

7 unordered_map::cbegin 容器迭代器

返回一个常量迭代器,它引用 unordered_map 的第一个元素。

8 unordered_map::cbegin 桶迭代器

返回一个常量迭代器,指向其存储桶中的第一个元素。

9 unordered_map::cend 容器迭代器

返回一个常量迭代器,它指向unordered_map 的末尾元素。

10 unordered_map::cend 桶迭代器

返回一个常量迭代器,该迭代器指向其存储桶之一中的末尾元素。

11 unordered_map::清除

通过删除所有元素来销毁 unordered_map 并将 unordered_map 的大小设置为零

12 无序_映射::计数

返回与键k关联的映射值的数量。

13 unordered_map::安放

通过插入新元素来扩展容器。

14 无序_映射::emplace_hint

使用提示作为元素位置在 unordered_map 中插入新元素。

15 unordered_map::空

测试 unordered_map 是否为空。

16 unordered_map::end 容器迭代器

返回一个指向unordered_map 中末尾元素的迭代器。

17 号 unordered_map::结束 桶迭代器

返回一个迭代器,该迭代器指向其存储桶之一中的末尾元素。

18 无序_映射::等于

返回与特定键匹配的元素范围。

19 unordered_map::擦除 位置版本

从位置删除 unordered_map 的单个元素。

20 unordered_map::擦除 密钥版本

删除与键k关联的映射值。

21 unordered_map::擦除 范围版本

从 unordered_map 中删除元素范围。

22 无序_映射::查找

查找与键k关联的元素。

23 无序映射::获取分配器

返回与 unordered_map 关联的分配器。

24 无序映射::哈希函数

计算unordered_map容器使用的哈希函数对象。

25 无序_映射::插入

通过在 unordered_map 中插入新元素来扩展容器。

26 unordered_map::插入 移动版本

通过在 unordered_map 中插入新元素来扩展容器。

27 unordered_map::插入 提示版本

通过在 unordered_map 中插入新元素来扩展容器。

28 unordered_map::插入 移动和提示版本

通过插入新元素来扩展 unordered_map。

29 unordered_map::插入 范围版本

通过在 unordered_map 中插入新元素来扩展容器。

30 unordered_map::插入 初始值设定项列表版本

通过从初始值设定项列表插入新元素来扩展映射。

31 无序_映射::key_eq

返回比较键是否相等的函数。

32 无序映射::负载因子

返回 unordered_map 容器的当前负载因子。

33 unordered_map::max_bucket_count

返回unordered_map容器可以拥有的最大桶数。

34 unordered_map::max_load_factor 获取版本

返回 unordered_map 容器的当前最大负载因子。

35 unordered_map::max_load_factor 设置版本

为 unordered_map 容器分配新的负载因子。

36 无序映射::最大大小

返回unordered_map可以容纳的最大元素数。

37 unordered_map::operator= 复制版本

通过替换旧内容将新内容分配给 unordered_map,并在必要时修改大小。

38 unordered_map::operator= 移动版本

将一个 unordered_map 的内容移动到另一个 unordered_map 中,并根据需要修改大小。

39 unordered_map::operator= initializer_list 版本

将元素从初始值设定项列表复制到 unordered_map。

40 unordered_map::运算符[]

如果键k与容器中的元素匹配,则方法返回对该元素的引用。

41 unordered_map::operator[] 移动版本

如果键k与容器中的元素匹配,则方法返回对该元素的引用。

42 无序_映射::重新散列

将容器中的桶数设置为n或更多。

43 无序_映射::保留

将容器中的桶数设置为最适合包含至少n个元素。

44 无序_映射::大小

返回 unordered_map 中存在的元素数。

45 无序_映射::交换

与另一个 unordered_map 交换第一个 unordered_map 的内容。

非成员重载函数

先生。 方法及说明
1 unordered_map::运算符==

测试两个 unordered_map 是否相等。

2 unordered_map::运算符!=

测试两个 unordered_map 是否相等。

3 无序_映射::交换

与另一个 unordered_map 交换第一个 unordered_map 的内容。

unordered_multimap简介

Unordered_multimap 是类似字典的数据结构。它是一个(键,值)对的序列,其中不同的元素可以具有相同的键。具有相同键的元素被分组在同一个存储桶中,并且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 - 密钥的类型。

  • T - 映射值的类型。

  • Hash - 一种一元函数对象类型,它采用key类型的对象作为参数,并基于它返回size_t类型的唯一值。

  • Pred - 一个二元谓词,其中两个键类型的参数并返回一个布尔值。

  • Alloc - 分配器对象的类型。

    T 可以替换为任何其他数据类型,包括用户定义的类型。

会员类型

以下成员类型可以用作成员函数的参数或返回类型。

先生。 会员类型 定义
1 密钥类型 Key(模板的第一个参数)
2 映射类型 T(模板的第二个参数)
3 值类型 对<const key_type,mapped_type>
4 散列器 第三个模板参数(默认为:hash<key_type>)
5 键等于 第四个模板参数(默认为:equal_to<key_type>)
6 分配器类型 Alloc(模板的第五个参数)
7 参考 值类型&
8 常量引用 常量值类型&
9 指针 allocator_traits<分配>::指针
10 常量指针 allocator_traits<Alloc>::const_pointer
11 迭代器 value_type value_type的前向迭代器
12 常量迭代器 const value_type value_type的前向迭代器
13 本地迭代器 value_type 的前向迭代器
14 常量局部迭代器 const value_type 的前向迭代器
15 差异类型 ptrdiff_t
16 尺码类型 尺寸_t

来自 <unordered_multimap> 的函数

下面是 <unordered_map> 标头中所有方法的列表。

构造函数

先生。 方法及说明
1 unordered_multimap::unordered_multimap() 默认构造函数

构造一个具有零个元素的空 unordered_multimap。

2 unordered_multimap::unordered_multimap() 复制构造函数

使用现有 unordered_multimap 中存在的每个元素的副本构造一个 unordered_multimap。

3 unordered_multimap::unordered_multimap() 移动构造函数

使用移动语义使用 other 的内容构造一个 unordered_multimap。

4 unordered_multimap::unordered_multimap() 范围构造函数

构造一个 unordered_multimap ,其元素数量与firstlast范围内的元素数量相同。

5 unordered_multimap::unordered_multimap() 初始化列表构造函数

从初始化列表构造一个 unordered_multimap。

析构函数

先生。 方法及说明
1 unordered_multimap::~unordered_multimap()

通过释放内存来销毁 unordered_multimap 对象。

会员功能

先生。 方法及说明
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() 容器迭代器

返回一个常量迭代器,它引用 unordered_multimap 的第一个元素。

7 unordered_multimap::cbegin() 桶迭代器

返回一个常量迭代器,指向其存储桶中的第一个元素。

8 unordered_multimap::cend() 容器迭代器

返回一个常量迭代器,它指向unordered_multimap 的末尾元素。

9 unordered_multimap::cend() 桶迭代器

返回一个常量迭代器,该迭代器指向其存储桶之一中的末尾元素。

10 unordered_multimap::clear()

通过删除所有元素来销毁 unordered_multimap 并将 unordered_multimap 的大小设置为零

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() 容器迭代器

返回一个指向unordered_multimap 中末尾元素的迭代器。

16 unordered_multimap::end() 桶迭代器

返回一个迭代器,该迭代器指向其存储桶之一中的末尾元素。

17 号 unordered_multimap::equal_range()

返回与特定键匹配的元素范围。

18 unordered_multimap::erase() 位置版本

从位置删除 unordered_multimap 的单个元素。

19 unordered_multimap::erase() 密钥版本

删除与键k关联的映射值。

20 unordered_multimap::erase() 范围版本

从 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() 值版本

通过在 unordered_multimap 中插入新元素来扩展容器。

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() 初始化列表版本

通过从初始值设定项列表插入新元素来扩展 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() 获取版本

返回 unordered_multimap 容器的当前最大负载因子。

34 unordered_multimap::max_load_factor() 设置版本

为 unordered_multimap 容器分配新的负载因子。

35 unordered_multimap::max_size()

返回unordered_multimap可以容纳的最大元素数。

36 unordered_multimap::operator=() 复制版本

通过替换旧内容将新内容分配给 unordered_multimap,并在必要时修改大小。

37 unordered_multimap::operator=() 移动版本

将一个 unordered_multimap 的内容移动到另一个 unordered_multimap 中,并根据需要修改大小。

38 unordered_multimap::operator=() 初始化列表版本

将元素从初始值设定项列表复制到 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 的内容与另一个交换。