unordered_map
是 C++ STL 中的一个关联容器,它是哈希表的一种实现。unordered_map
提供了平均 O(1) 时间复杂度的 key-value 存储和查找操作,并支持快速插入、删除和遍历元素的功能。它与 map
相比,具有更高的插入、查找效率,但是不支持按照 key 进行排序。
unordered_map
是 C++ STL 中的一个关联容器,它采用哈希表的实现方式,提供了高效的 key-value 存储和查找功能。它的特点是:
在使用 unordered_map
之前,需要包含头文件
,并且使用命名空间 std
:
#include
using namespace std;
定义一个 unordered_map
对象的语法如下所示:
unordered_map<key_type, value_type> myMap;
其中,key_type
和 value_type
分别代表键和值类型。例如:
unordered_map<string, int> myMap;
上述代码定义了一个 unordered_map
对象,它的键为字符串类型,值为整数类型。
可以使用以下方法对 unordered_map
对象进行初始化:
unordered_map<key_type, value_type> myMap;
unordered_map<key_type, value_type> myMap = { {key1, value1}, {key2, value2}, ... };
其中,key1
、key2
和 value1
、value2
分别代表键和值的具体内容。
unordered_map<string, int> myMap = { {"apple", 3}, {"banana", 2}, {"orange", 4} };
上述代码定义了一个 unordered_map
对象,它包含三个元素,分别是 “apple”,“banana” 和 “orange”。
unordered_map<key_type, value_type> myMap(anotherMap);
其中,anotherMap
是另一个 unordered_map
对象。
unordered_map<string, int> myMap(anotherMap);
上述代码定义了一个 unordered_map
对象,它与另一个 unordered_map
对象 anotherMap
相同。
unordered_map
中的元素是按照 key-value 的形式存储的。可以使用如下方式访问元素:
cmyMap.at(key);
其中,key
是要查找的键。
c++复制代码unordered_map<string, int> myMap = { {"apple", 3}, {"banana", 2}, {"orange", 4} };
int num = myMap.at("apple");
上述代码定义了一个 unordered_map
对象,然后使用 at
方法查找键为 “apple” 的值,并将结果赋值给变量 num
。
myMap[key] = value;
其中,key
是要访问的键,value
是要设置的值。
unordered_map<string, int> myMap;
myMap["apple"] = 3;
int num = myMap["apple"];
上述代码定义了一个 unordered_map
对象,然后使用 []
运算符将键 “apple” 的值设置为 3,并将结果赋值给变量 num
。
myMap.find(key);
其中,key
是要查找的键。
unordered_map<string, int> myMap = { {"apple", 3}, {"banana", 2}, {"orange", 4} };
auto it = myMap.find("apple");
if (it != myMap.end()) {
int num = it->second;
}
上述代码定义了一个 unordered_map
对象,然后使用 find
方法查找键为 “apple” 的值。如果找到了,就将其赋值给迭代器 it
,然后通过 it->second
访问该元素的值。注意,需要检查迭代器是否等于 end()
,以确定是否找到了元素。
可以使用如下方式向 unordered_map
中插入和删除元素:
使用 insert
方法向 unordered_map
中插入元素:
myMap.insert({key, value});
其中,key
和 value
分别代表要插入的键和值。
unordered_map<string, int> myMap = { {"apple", 3}, {"banana", 2} };
myMap.insert({"orange", 4});
上述代码定义了一个 unordered_map
对象,并向其插入另一个元素 “orange”。
使用 erase
方法从 unordered_map
中删除元素:
myMap.erase(key);
其中,key
是要删除的键。
unordered_map<string, int> myMap = { {"apple", 3}, {"banana", 2}, {"orange", 4} };
myMap.erase("banana");
上述代码定义了一个 unordered_map
对象,并从中删除了键为 “banana” 的元素。
可以使用如下方式遍历 unordered_map
中的元素:
使用迭代器 begin()
和 end()
来实现遍历:
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
cout << it->first << " " << it->second << endl;
}
上述代码使用迭代器遍历 unordered_map
中的每一个元素。其中,it->first
和 it->second
分别代表当前迭代器指向元素的键和值。
使用 C++11 中的范围遍历来实现遍历:
for (auto& [key, value] : myMap) {
cout << key << " " << value << endl;
}
上述代码使用 C++11 范围遍历遍历 unordered_map
中的每一个元素。其中,[key, value]
分别代表当前迭代器指向元素的键和值。
unordered_map
的平均时间复杂度为 O(1),在插入、查找、删除、遍历等方面都具有较高的效率。但是,考虑到其内部实现是哈希表,而哈希表的性能受到哈希函数和负载因子的影响,所以在实际使用中需要注意调整哈希函数和负载因子的值以达到最佳性能。