C++中的unordered_map at()函数
unordered_map: unordered_map是一种关联式容器,存储的元素由键值和映射值组成。键值用于唯一标识元素,映射值是与键关联的内容。键和值都可以是预定义或用户定义的任何类型。
unordered_map :: at(): C++中的这个函数 unordered_map 返回具有键k的元素的值的引用。
语法:
unordered_map.at(k);
参数:
我们想要访问其映射值的元素的键值。
返回类型:
与键值等效的元素的映射值的引用。
注意: 如果键不存在,则该方法会导致运行时错误。
// C++ program to illustrate
// std :: unordered_map :: at()
#include<iostream>
#include<string>
#include<unordered_map>
using namespace std;
int main()
{
unordered_map<string,int> mp = {
{"first",1},
{"second",2},
{"third",3},
{"fourth",4}
};
// 返回引用,即键“second”对应的映射值
cout<<"键mp ['second']的值为"
<<mp.at("second")<<endl;
try
{
mp.at();
}
catch(const out_of_range &e)
{
cerr<<"在"<<e.what()<<"处发生异常"<<endl;
}
return 0;
}
输出:
键mp['second']的值为2
异常发生在_Map_base :: at
实际应用: std :: unordered_map :: at() 函数可用于访问映射值,从而可以进行编辑,更新等操作。
// CPP program to illustrate
// application of this function
// Program to correct the marks
// given in different subjects
#include<iostream>
#include<string>
#include<unordered_map>
using namespace std;
// driver code
int main()
{
// marks in different subjects
unordered_map<string,int> my_marks = {
{"Maths", 90},
{"Physics", 87},
{"Chemistry", 98},
{"Computer Application", 94}
};
my_marks.at("Physics") = 97;
my_marks.at("Maths") += 10;
my_marks.at("Computer Application") += 6;
for (auto& i: my_marks)
{
cout<<i.first<<": "<<i.second<<endl;
}
return 0;
}
输出:
Computer Application: 100
Chemistry: 98
Physics: 97
Maths: 100
unordered_map at()和unordered_map operator()之间的区别
- at()和operator[]都用于引用给定位置的元素,唯一的区别是,at()会抛出out-of-range异常,而operator[]会显示未定义的行为,即如果operator[]用于查找对应于键的值,而键不在unordered map中,则它将首先将键插入到map中,然后将默认值’0’分配给该键对应的值。