📅  最后修改于: 2023-12-03 14:59:46.877000             🧑  作者: Mango
在C++ STL(标准模板库)中,unordered_map
是一个基于哈希表实现的关联容器,它可以用来存储键值对。哈希表是一种高效的数据结构,能够以常数时间O(1)的复杂度进行插入、查找、删除等操作。
unordered_map
中提供了运算符[]
,我们可以利用它来访问/修改容器中的元素。如果指定的键存在,[]
将返回与之关联的值;如果键不存在,则会创建新的键值对。
接下来我们来详解unordered_map
运算符[]
的使用方法和注意事项。
下面是unordered_map
运算符[]
的语法:
unordered_map[key] = value; // 存储键值对
unordered_map[key]; // 访问键对应的值
假设我们需要统计一段英文文本中单词出现的次数,我们可以使用unordered_map
和[]
运算符来统计:
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main()
{
unordered_map<string, int> word_count; // 存储单词及其出现次数
string word;
while (cin >> word) { // 从标准输入读取单词
++word_count[word]; // 统计单词出现次数
}
for (const auto& w : word_count) { // 遍历unordered_map
cout << w.first << " appears " << w.second << " times." << endl;
}
return 0;
}
上述代码中,我们创建了一个unordered_map
对象word_count
来存储单词及其出现次数。在读入单词时,我们可以直接使用[]
运算符来访问和修改unordered_map
中的元素,如果单词不存在,[]
会创建一个新的键值对,然后将其值置为0再加1。
在遍历word_count
输出结果时,我们使用了const auto&
来声明遍历过程中的键值对,这样可以避免复制pair
对象,提高遍历的效率。
[]
运算符访问容器中不存在的键时,会自动将其插入到unordered_map
中,并将其值初始化为默认值(数值为0,string为空字符串等)。[]
运算符修改容器中的元素时,如果指定的键不存在,它会自动创建一个新的键值对,然后将其值置为指定的值。unordered_map
的键类型是自定义类型,需要定义hash
函数来实现哈希化,否则程序将无法编译通过。unordered_map
提供了at
函数和find
函数来查找指定的键和访问相应的值,但是它们与[]
运算符不同,当指定的键不存在时,at
函数会抛出out_of_range
异常,而find
函数将返回unordered_map::end()
迭代器。因此在使用at
函数和find
函数时需要注意异常处理和迭代器判断。在使用C++ STL中的unordered_map
中,[]
运算符是一个非常方便的工具,它能够实现对容器中元素的快速访问和修改,并且可以通过自定义类型和哈希函数来适应不同的需求。同时需要注意的是,在使用unordered_map
时需要注意异常处理和迭代器判断,以免出现程序崩溃等问题。