📅  最后修改于: 2023-12-03 14:59:46.854000             🧑  作者: Mango
C++ STL中的unordered_map是一种关联容器,用于存储一组键值对。与map不同的是,unordered_map内部使用哈希表实现,使得其查找和插入的操作效率都非常高。
unordered_map
的声明如下:
#include <unordered_map>
std::unordered_map<Key, Value> myMap;
其中,Key
和Value
分别是键和值的类型。需要注意的是,Key
必须是可哈希的。
可以通过insert
函数或operator[]
操作符来插入键值对。使用insert
函数需要传入一个pair<Key, Value>
类型的参数,示例如下:
std::unordered_map<std::string, int> myMap;
myMap.insert(std::pair<std::string, int>("one", 1));
myMap.insert(std::make_pair("two", 2));
使用operator[]
操作符则更为简单,直接将键和值作为参数传入即可,示例如下:
std::unordered_map<std::string, int> myMap;
myMap["one"] = 1;
myMap["two"] = 2;
需要注意的是,使用operator[]
操作符插入键值对时,如果该键已经存在于unordered_map中,则会直接修改其对应的值,而不是插入一条新的键值对。
可以使用迭代器对unordered_map进行遍历。例如,以下代码展示了如何使用迭代器依次输出unordered_map中所有的键值对:
std::unordered_map<std::string, int> myMap;
myMap["one"] = 1;
myMap["two"] = 2;
// 通过迭代器遍历所有键值对
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
可以使用find
函数进行查找。该函数接受一个键作为参数,返回一个指向该键值对的迭代器,或者返回unordered_map的end
迭代器,表示未找到该键。
例如,以下代码展示了如何查找unordered_map中键为"one"的键值对:
std::unordered_map<std::string, int> myMap;
myMap["one"] = 1;
myMap["two"] = 2;
// 查找键为"one"的键值对
auto it = myMap.find("one");
if (it != myMap.end()) {
std::cout << "Found: Key: " << it->first << ", Value: " << it->second << std::endl;
} else {
std::cout << "Not found!" << std::endl;
}
可以使用erase
函数删除unordered_map中的键值对。该函数接受一个键作为参数,返回一个指向下一个键值对的迭代器,如果删除的是最后一个键值对,则返回unordered_map的end
迭代器。
例如,以下代码展示了如何删除unordered_map中键为"one"的键值对:
std::unordered_map<std::string, int> myMap;
myMap["one"] = 1;
myMap["two"] = 2;
// 删除键为"one"的键值对
myMap.erase("one");
// 遍历所有键值对
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
unordered_map是一种非常高效的关联容器,能够以O(1)的时间复杂度进行查找和插入操作。如果需要对存储的键值对进行排序,则可以使用map。