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
的例子,你可以根据具体的需求进行进一步的使用和定制。