📜  C++ STL中的unordered_map(1)

📅  最后修改于: 2023-12-03 14:59:46.854000             🧑  作者: Mango

C++ STL中的unordered_map介绍

C++ STL中的unordered_map是一种关联容器,用于存储一组键值对。与map不同的是,unordered_map内部使用哈希表实现,使得其查找和插入的操作效率都非常高。

unordered_map的声明

unordered_map的声明如下:

#include <unordered_map>

std::unordered_map<Key, Value> myMap;

其中,KeyValue分别是键和值的类型。需要注意的是,Key必须是可哈希的。

unordered_map的插入操作

可以通过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进行遍历。例如,以下代码展示了如何使用迭代器依次输出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;
}
unordered_map的查找操作

可以使用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;
}
unordered_map的删除操作

可以使用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。