C++ Unordered_Mutimap

2024 年 8 月 29 日 | 4 分钟阅读

关联容器是无序多重映射(unordered multimap)。它存储键值对的方式与无序映射类似。另一方面,多重映射允许重复值,而无序映射不允许。这些是无序容器,因此在存储内容时没有顺序。不过,允许重复项,因此具有相同键的内容会聚集在同一个桶中。对于重复键,每个键值对都有一个唯一的计数器值。

无序多重映射的内部哈希算法决定了其时间复杂度,它将键值对存储在哈希表中。任何操作平均需要常量时间,最坏情况下需要线性时间。

语法

C++ STL 中 unordered_multimap 的语法如下。

示例

让我们举一个例子来说明 C++ 中 unordered_multimap 函数的使用。

输出

Unordered multimap contains:
apple = 3
apple = 4
banana = 2
cherry = 5
date = 1

无序多重映射的方法

以下是一些常用的 unordered_multimap 函数列表

begin() -

它返回一个指向容器或其某个桶的第一个元素的迭代器。

end() -

它提供一个迭代器,指向容器或其某个桶的最后一个元素之后的位置。

count() -

它返回容器中其键与参数键对应的项目数。

cbegin() -

它返回一个常量迭代器,指向容器或其某个桶的第一个元素。

cend() -

它提供一个常量迭代器,指向容器或其某个桶的最后一个元素之后的位置。

clear() -

它清除无序多重映射容器的内容。

size() -

它返回无序多重映射的大小。它显示容器内物品的数量。

swap() -

它交换两个无序多重映射容器的内容。这两个容器可以有不同的大小。

find() -

它返回一个指向键 k 的条目的迭代器;bucket size() - 返回桶 n 中的元素数量。

find() -

如果无序多重映射容器为空,此函数返回 true。否则返回 false。

函数 max size() 返回无序多重映射容器能够容纳的最大项目数量。

emplace() -

它向无序多重映射容器添加一个新的键元素。

示例

在下面的示例中,使用了其中一些技术。

输出

Initial unordered multimap:
apple = 5
banana = 3
banana = 4
cherry = 8
cherry = 6
date = 2

Size of the unordered multimap is 6
Key banana is there in the unordered multimap
Value associated with banana is 3
Number of values with banana are 2

After insertion:
apple = 5
banana = 3
banana = 4
cherry = 8
cherry = 6
date = 2
date = 6
fig = 7
grape = 9

After deletion of apple:
banana = 3
banana = 4
cherry = 8
cherry = 6
date = 2
date = 6
fig = 7
grape = 9
unordered multimap is empty

时间复杂度

根据所使用的内部哈希算法,无序多重映射上的所有操作通常需要相同的时间。在最坏的情况下,时间可以线性增长。但多重映射(基于树的多重映射)不如无序多重映射。

通常情况下,线性,即 O(n)

在最坏情况下,O(n^2),即二次方。