C++ unordered_map用法总结
std::unordered_map
是 C++ 标准库中的一个哈希表实现的关联容器,用于存储键-值对,提供了快速的查找、插入和删除操作。以下是 std::unordered_map
的详细用法总结:
包含头文件:
#include <unordered_map>
创建 std::unordered_map
对象:
std::unordered_map<KeyType, ValueType> myMap;
KeyType
是键的类型,可以是基本数据类型或自定义类型。ValueType
是值的类型,可以是基本数据类型或自定义类型。
插入元素:
myMap[key] = value;
myMap.insert(std::make_pair(key, value));
访问元素:
value = myMap[key];
查找元素:
auto it = myMap.find(key);
if (it != myMap.end()) {
// 元素找到
value = it->second;
} else {
// 元素未找到
// 处理不存在的情况
}
删除元素:
myMap.erase(key);
遍历 std::unordered_map
:
for (auto& pair : myMap) {
// pair.first 是键
// pair.second 是值
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
获取大小:
size_t size = myMap.size();
检查是否为空:
bool isEmpty = myMap.empty();
注意事项:
-
std::unordered_map
不保证元素的顺序,是无序的。 -
对于自定义类型的键,需要提供哈希函数和相等比较函数。可以通过提供自定义的
std::hash
和std::equal_to
来实现。namespace std { template<> struct hash<MyCustomType> { size_t operator()(const MyCustomType& obj) const { // 返回计算得到的哈希值 } }; }
示例:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> myMap;
// 插入元素
myMap["one"] = 1;
myMap["two"] = 2;
myMap["three"] = 3;
// 访问元素
std::cout << "Value for key 'two': " << myMap["two"] << std::endl;
// 查找元素
auto it = myMap.find("four");
if (it != myMap.end()) {
std::cout << "Value for key 'four': " << it->second << std::endl;
} else {
std::cout << "Key 'four' not found." << std::endl;
}
// 删除元素
myMap.erase("three");
// 遍历 unordered_map
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
return 0;
}
这是一个简单的使用 std::unordered_map
的例子,你可以根据具体的需求进行进一步的使用和定制。