C++ 库 - <unordered_map>



unordered_map 简介

Unordered map 是一种类似字典的数据结构。它是一系列 (键,值) 对的序列,其中每个唯一的键只关联一个值。它通常被称为关联数组。它允许基于键快速检索单个元素。它还实现了直接访问运算符(下标运算符 []),它允许使用键值作为参数直接访问映射值。

Unordered map 不会根据键或映射值以任何特定顺序排序其元素,而是根据其哈希值组织到桶中,以允许通过键值直接快速访问单个元素。

在通过键访问单个元素时,unordered map 的性能优于 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 - 二元谓词,它接受两个key 类型的参数并返回一个布尔值。

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

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

成员类型

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

序号 成员类型 定义
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 的前向迭代器value_type
12 const_iterator 指向 const value_type 的前向迭代器value_type
13 local_iterator 指向 value_type 的前向迭代器
14 const_local_iterator 指向 const value_type 的前向迭代器
15 difference_type ptrdiff_t
16 size_type size_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,其元素数量与firstlast.

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

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

析构函数

序号 方法 & 描述
1 unordered_map::~unordered_map

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

成员函数

序号 方法 & 描述
1 unordered_map::at

返回与键k.

2 unordered_map::begin 容器迭代器

返回一个指向映射第一个元素的迭代器。

3 unordered_map::begin 桶迭代器

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

4 unordered_map::bucket

返回元素位于其中的桶号k位于。

5 unordered_map::bucket_count

返回 unordered_map 容器中桶的数量。

6 unordered_map::bucket_size

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

7 unordered_map::cbegin 容器迭代器

返回一个指向 unordered_map 第一个元素的常量迭代器。

8 unordered_map::cbegin 桶迭代器

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

9 unordered_map::cend 容器迭代器

返回一个指向超出末尾unordered_map 的元素。

10 unordered_map::cend 桶迭代器

返回一个指向超出末尾其一个桶中的元素。

11 unordered_map::clear

通过删除所有元素并设置 unordered_map 的大小为.

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

返回一个指向超出末尾unordered_map 中的元素。

17 unordered_map::end 桶迭代器

返回一个指向超出末尾其一个桶中的元素。

18 unordered_map::equal

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

19 unordered_map::erase 位置版本

位置.

20 unordered_map::erase 键版本

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

21 unordered_map::erase 范围版本

从 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 移动版本

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

27 unordered_map::insert 提示版本

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

28 unordered_map::insert 移动和提示版本

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

29 unordered_map::insert 范围版本

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

30 unordered_map::insert 初始化列表版本

通过从初始化列表插入新元素来扩展映射。

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 获取版本

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

35 unordered_map::max_load_factor 设置版本

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

36 unordered_map::max_size

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

37 unordered_map::operator= 复制版本

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

38 unordered_map::operator= 移动版本

将一个 unordered_map 的内容移动到另一个,并在必要时修改大小。

39 unordered_map::operator= 初始化列表版本

将初始化列表中的元素复制到无序映射中。

40 unordered_map::operator[]

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

41 unordered_map::operator[] 移动版本

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

42 unordered_map::rehash

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

43 unordered_map::reserve

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

44 unordered_map::size

返回无序映射中存在的元素数量。

45 unordered_map::swap

交换第一个无序映射与另一个无序映射的内容。

非成员重载函数

序号 方法 & 描述
1 unordered_map::operator==

测试两个无序映射是否相等。

2 unordered_map::operator!=

测试两个无序映射是否相等。

3 unordered_map::swap

交换第一个无序映射与另一个无序映射的内容。

无序多映射简介

无序多映射是一种类似字典的数据结构。它是一系列 (键,值) 对的序列,其中不同的元素可以具有等效的键。具有等效键的元素组合在同一个桶中,并且以equal_range 迭代器可以遍历所有这些元素的方式。

无序多映射不会根据其键或映射值按任何特定顺序排序其元素,而是根据其哈希值组织到桶中,以便能够通过其键值直接快速访问各个元素。

定义

以下是来自 <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 - 二元谓词,它接受两个key 类型的参数并返回一个布尔值。

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

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

成员类型

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

序号 成员类型 定义
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 的前向迭代器value_type
12 const_iterator 指向 const value_type 的前向迭代器value_type
13 local_iterator 指向 value_type 的前向迭代器
14 const_local_iterator 指向 const value_type 的前向迭代器
15 difference_type ptrdiff_t
16 size_type size_t

来自 <unordered_multimap> 的函数

以下是 <unordered_map> 头文件中的所有方法列表。

构造函数

序号 方法 & 描述
1 unordered_multimap::unordered_multimap() 默认构造函数

构造一个空且元素数量为零的无序多映射。

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

构造一个无序多映射,其中包含现有无序多映射中每个元素的副本。

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

使用移动语义构造一个包含其他内容的无序多映射。

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

构造一个无序多映射,其元素数量与范围内的元素数量相同。firstlast.

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

从初始化列表构造一个无序多映射。

析构函数

序号 方法 & 描述
1 unordered_multimap::~unordered_multimap()

通过释放其内存来销毁无序多映射对象。

成员函数

序号 方法 & 描述
1 unordered_multimap::begin() 容器迭代器

返回一个迭代器,该迭代器引用无序多映射的第一个元素。

2 unordered_multimap::begin() 桶迭代器

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

3 unordered_multimap::bucket()

返回元素位于其中的桶号k位于。

4 unordered_multimap::bucket_count()

返回无序多映射容器中存在的桶数量。

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() 移动版本

通过插入新元素来扩展无序多映射。

26 unordered_multimap::insert() 提示版本

通过在无序多映射中插入新元素来扩展容器。

27 unordered_multimap::insert() 提示移动版本

通过使用移动语义在无序多映射中插入新元素来扩展容器。

28 unordered_multimap::insert() 范围版本

通过在无序多映射中插入新元素来扩展容器。

29 unordered_multimap::insert() 初始化列表版本

通过从初始化列表插入新元素来扩展无序多映射。

30 unordered_multimap::key_eq()

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

31 unordered_multimap::load_factor()

返回无序多映射容器的当前负载因子。

32 unordered_multimap::max_bucket_count()

返回无序多映射容器可以具有的最大桶数。

33 unordered_multimap::max_load_factor() 获取版本

返回无序多映射容器的当前最大负载因子。

34 unordered_multimap::max_load_factor() 设置版本

为无序多映射容器分配新的负载因子。

35 unordered_multimap::max_size()

返回无序多映射可以容纳的最大元素数。

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

通过替换旧内容为无序多映射分配新内容,并在必要时修改大小。

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

将一个无序多映射的内容移动到另一个无序多映射中,并在必要时修改大小。

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

将初始化列表中的元素复制到无序多映射中。

39 unordered_multimap::rehash()

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

40 unordered_multimap::reserve()

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

41 unordered_multimap::size()

返回无序多映射中存在的元素数量。

42 unordered_multimap::swap()

交换第一个无序多映射与另一个无序多映射的内容。

非成员重载函数

序号 方法 & 描述
1 unordered_multimap::operator==()

测试两个无序多映射是否相等。

2 unordered_multimap::operator!=()

测试两个无序多映射是否相等。

3 unordered_multimap::swap()

交换第一个无序多映射与另一个无序多映射的内容。

广告