目录
std::unordered_map介绍
std::unordered_map 是 C++ 标准库中的一种关联容器,用于实现键值对的存储和快速查找。它基于哈希表实现,具有以下特性:
特性:
- 快速查找: 由于底层使用哈希表,
std::unordered_map具有快速的查找性能。平均情况下,查找、插入和删除操作的时间复杂度为 O(1)。 - 无序性: 与
std::map不同,std::unordered_map中的元素是无序的,即它们没有特定的顺序。如果需要有序性,应该使用std::map。 - 可变大小: 可以动态添加或删除键值对,而不需要提前指定容器的大小。
- 哈希冲突处理: 哈希表中可能会发生哈希冲突,
std::unordered_map采用开链法来处理冲突,即在每个哈希桶中维护一个链表。
优点:
- 快速查找: 对于大规模数据集,
std::unordered_map提供了快速的查找操作,使其成为高效的数据结构。 - 灵活性: 可以动态地插入和删除元素,适用于动态变化的数据集。
- 哈希表的均摊复杂度: 在理想情况下,哈希表的均摊复杂度为 O(1),提供了高效的性能。
缺点:
- 空间占用: 由于哈希表需要维护额外的空间来存储哈希桶和链表,可能会占用较多的内存空间。
- 不适合有序操作: 如果需要有序迭代或者按照键的顺序访问元素,
std::unordered_map不是最佳选择,应该考虑使用std::map。 - 性能不稳定: 在某些情况下,哈希表的性能可能会退化,导致查找、插入和删除操作的时间复杂度升高。
以下是 std::unordered_map 的简单用法示例:
#include <iostream>
#include <unordered_map>
int main() {
// 创建一个 unordered_map
std::unordered_map<int, std::string> myMap;
// 插入键值对
myMap[1] = "One";
myMap[2] = "Two";
myMap[3] = "Three";
// 查找元素
auto it = myMap.find(2);
if (it != myMap.end()) {
std::cout << "Key 2 found, Value: " << it->second << std::endl;
} else {
std::cout << "Key 2 not found." << std::endl;
}
// 遍历 unordered_map
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
return 0;
}
在这个例子中,我们创建了一个 std::unordered_map,插入了一些键值对,并且演示了查找和遍历操作。std::unordered_map 的初始化和赋值方式有多种,取决于使用的 C++ 版本和个人偏好。以下是一些常见的初始化和赋值方式:
初始化方式:
1. 直接初始化:
#include <unordered_map>
std::unordered_map<int, std::string> myMap1; // 默认构造函数,创建一个空的 unordered_map
std::unordered_map<int, std::string> myMap2 = {
{1, "One"}, {2, "Two"}, {3, "Three"}};
// 使用初始化列表进行初始

本文详细介绍了C++标准库中的unordered_map容器,包括其快速查找、无序特性、动态扩展、哈希冲突处理,以及各种初始化、赋值、查找和操作方法。
最低0.47元/天 解锁文章
2029

被折叠的 条评论
为什么被折叠?



