C++ unordered_multiset
std::unordered_multiset
unordered_multiset 是 C++ 中标准模板库 (STL) 定义的容器,用于存储无特定顺序的元素,并允许同一元素多次出现或重复值。 <unordered_set> 头文件用于 unordered_set 和 unordered_multiset 容器。
语法
以下是声明 unordered_multiset 的语法:
#include <unordered_set> std::unordered_multiset<type> container_name;
此处,
- <type> 是要存储在 unordered_multiset 中的元素的数据类型(例如,int、string 等)。
- container_name 是 unordered_multiset 变量 的名称。
创建 unordered_multiset 的示例
以下示例演示了如何创建无序多集:
#include <unordered_set> #include <iostream> #include <string> using namespace std; int main() { // 为整数和字符串声明 unordered_multisets unordered_multiset<int> ums_int = {1, 2, 3, 3}; unordered_multiset<string> ums_str = {"apple", "banana", "apple"}; // 将两组一起显示(合并显示) cout << "Merged unordered_multiset (Integers and Strings): "; for (const auto& elem : ums_int) { cout << elem << " "; } for (const auto& elem : ums_str) { cout << elem << " "; } cout << endl; return 0; }
输出
Merged unordered_multiset (Integers and Strings): 3 3 2 1 banana apple apple
unordered_multiset 的成员函数
1. insert() 函数
insert() 函数用于向 unordered_multiset 添加一个或多个元素,允许重复操作。
语法
unordered_multiset<type> ums; ums.insert(element); ums.insert({element1, element2, ...});
2. find() 函数
find() 函数用于检查 unordered_multiset 中是否存在某个元素。如果找到,它将返回指向该元素的迭代器;否则,返回 end()
。
语法
auto it = ums.find(element); // 返回元素的迭代器或 ums.end()
3. count() 函数
count() 函数返回 unordered_multiset 中元素出现的次数。由于此函数允许重复,因此它将返回该元素在容器中的总数。
语法
size_t count = ums.count(element); // 返回元素出现的次数
4. erase() 函数
erase() 函数用于从 unordered_multiset 中删除一个或多个元素。您可以按值删除特定元素,也可以使用迭代器删除单个元素。对于重复元素,每次调用只会删除一个。
语法
ums.erase(element); // 删除元素的一个实例 ums.erase(it); // 删除迭代器 `it` 处的元素 ums.erase(ums.begin(), ums.end()); // 删除范围内的所有元素
5. find() 或 count() 函数
此函数将检查容器中是否存在元素。
语法
list.count(element); // 用于列表 string.count(substring); // 用于字符串
6. size() 函数
size() 函数返回 unordered_multiset 中当前的元素数量。
语法
size_t size = ums.size(); // 返回集合中的元素数量
7. begin() 和 end() 函数
要进行迭代,您可以使用迭代器或基于范围的循环遍历 unordered_multiset 中的元素。begin() 和 end() 用于访问第一个和最后一个元素。
语法
for (auto it = ums.begin(); it != ums.end(); ++it) { // 通过 *it 访问每个元素 }
unordered_set 与 unordered_multiset
- unordered_set:仅存储唯一元素的容器,不允许重复元素。
- unordered_multiset:允许同一元素多次出现(重复)的容器。
unordered_multiset 的平均时间复杂度
unordered_multiset 使用 哈希表 数据结构实现。由于元素会根据其哈希值被哈希到"桶"中,因此访问速度更快。 unordered_multiset 对于一些通用操作(例如查找、插入和删除)提供了常数时间复杂度,即 O(1)。
哈希碰撞 会导致最坏的时间复杂度为 O(n)。这是因为,在碰撞中,多个元素会被哈希到同一个 bucket 中,这会导致对该 bucket 中的所有元素进行线性搜索。这会导致性能显著下降。
unordered_multiset 的用例
- 当您想要存储同一元素的多次出现时使用它。
- 它适用于计算项目的频率或需要重复项的情况。
- 它对于快速查找和插入非常高效,无需排序。