在C++标准模板库(STL)中,unordered_multimap 是一个关联容器,它存储键值对,并且允许键值对中的键有多个相同元素。它是基于哈希表实现的,因此查找、插入和删除操作通常具有平均时间复杂度为 O(1) 的特点。 以下是 unordered_multimap 的一些关键特性和操作: - 键的唯一性:与 map 不同,unordered_multimap 允许有相同键的多个元素。
- 无序性:元素在容器中不是按照键排序的,而是根据哈希函数的值进行存储。
- 迭代器:unordered_multimap 提供了迭代器,可以遍历所有元素。
- 元素访问:可以使用键来查找对应的值,但因为可能存在多个具有相同键的元素,所以返回的是一个迭代器范围。
- 构造与初始化:可以默认构造一个空的 unordered_multimap,也可以通过范围来初始化它。
- 大小操作:可以查询 unordered_multimap 的大小,即它包含的键值对数量。
- 插入操作:可以插入一个键值对,或者通过范围来插入多个键值对。
- 删除操作:可以根据键或者迭代器来删除元素。
- 查找操作:可以使用键来查找对应的值,返回的是一对迭代器,表示具有该键的所有元素的范围。
- 哈希函数和键比较函数:unordered_multimap 使用用户提供的哈希函数和键比较函数来管理元素。
下面是一个简单的 unordered_multimap 使用示例: #include <iostream>
#include <unordered_map>
int main() {
// 创建一个 unordered_multimap
std::unordered_multimap<int, std::string> umm;
// 插入元素
umm.insert(std::make_pair(1, "one"));
umm.insert(std::make_pair(1, "another one"));
umm.insert(std::make_pair(2, "two"));
// 遍历 unordered_multimap
for (const auto& pair : umm) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
// 根据键查找元素
auto range = umm.equal_range(1);
for (auto it = range.first; it != range.second; ++it) {
std::cout << "Found: " << it->second << std::endl;
}
// 删除一个元素
umm.erase(umm.begin());
// 删除特定键的所有元素
umm.erase(2);
return 0;
}
请注意,unordered_multimap 的行为可能会因为哈希函数的质量和键比较函数的效率而有所不同。在设计哈希表时,一个好的哈希函数可以帮助减少冲突,从而提高性能。
(责任编辑:admin) |