unordered_map 是 C++ 标准库中的一种哈希表实现,它提供了基于键值对(key-value)的存储,提供了常数时间复杂度的查找、插入和删除键值对的操作。
初始化代码示例:
cpp
#include <unordered_map>
using namespace std;
unordered_map<int, string> hashmap; // 初始化一个空的哈希表 map
unordered_map<int, string> hashmap{{1, "one"}, {2, "two"}, {3, "three"}};// 初始化一个包含一些键值对的哈希表 map
另外,在C++哈希表中,如果被访问的是一个不存在的键,它会自动创建这个键,对应的值时默认构造的值。
cpp
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
// 初始化哈希表
unordered_map<int, string> hashmap{{1, "one"}, {2, "two"}, {3, "three"}};
cout << hashmap.empty() << endl; // 检查哈希表是否为空,输出:0 (false)
cout << hashmap.size() << endl; // 获取哈希表的大小,输出:3
// 查找指定键是否存在
// 注意 contains 方法是 C++20 新增的
// 输出:Key 2 -> two
if (hashmap.contains(2)) {
cout << "Key 2 -> " << hashmap[2] << endl;
} else {
cout << "Key 2 not found." << endl;
}
cout << hashmap[4] << endl; // 获取指定键对应的值,若不存在会返回默认构造的值
// 输出空字符串
hashmap[4] = "four"; // 插入一个新的键值对
cout << hashmap[4] << endl; // 获取新插入的值,输出:four
hashmap.erase(3); // 删除键值对
if (hashmap.contains(3)) {
cout << "Key 3 -> " << hashmap[3] << endl;
} else {
cout << "Key 3 not found." << endl;
}
// 检查删除后键 3 是否存在
// 输出:Key 3 not found.
// 遍历哈希表
// 输出(顺序可能不同):
// 4 -> four
// 2 -> two
// 1 -> one
for (const auto &pair: hashmap) {
cout << pair.first << " -> " << pair.second << endl;
}
// 特别注意,访问不存在的键会自动创建这个键
unordered_map<int, string> hashmap2;
// 键值对的数量是 0
cout << hashmap2.size() << endl; // 0
// 访问不存在的键,会自动创建这个键,对应的值是默认构造的值
cout << hashmap2[1] << endl; // empty string
cout << hashmap2[2] << endl; // empty string
// 现在键值对的数量是 2
cout << hashmap2.size() << endl; // 2
return 0;
}
哈希集合
unordered_set 是 C++ 标准库中的一种哈希集合实现,用于存储不重复的元素,常见使用场景是对元素进行去重。
初始化示例:
cpp
#include <unordered_set>
using namespace std;
unordered_set<int> uset; // 初始化一个空的哈希集合 set
unordered_set<int> uset{1, 2, 3, 4}; // 初始化一个包含一些元素的哈希集合 set
常用操作示例:
cpp
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
unordered_set<int> hashset{1, 2, 3, 4}; // 初始化哈希集合
cout << hashset.empty() << endl; // 检查哈希集合是否为空,输出:0 (false)
cout << hashset.size() << endl; // 获取哈希集合的大小,输出:4
// 查找指定元素是否存在
// 输出:Element 3 found.
if (hashset.contains(3)) {
cout << "Element 3 found." << endl;
} else {
cout << "Element 3 not found." << endl;
}
// 插入一个新的元素
hashset.insert(5);
// 删除一个元素
hashset.erase(2);
// 输出:Element 2 not found.
if (hashset.contains(2)) {
cout << "Element 2 found." << endl;
} else {
cout << "Element 2 not found." << endl;
}
// 遍历哈希集合
// 输出(顺序可能不同):
// 1
// 3
// 4
// 5
for (const auto &element : hashset) {
cout << element << endl;
}
return 0;
}