C++ unordered_map::at() 函数



C++ 的unordered_map::at()函数用于检索给定项目键等效于key的映射值的引用,或者我们可以说它返回具有元素作为键“k”的值的引用。

如果项目不存在,则抛出类型为“out of range”的异常。使用此函数,我们可以访问映射值并修改它们。

语法

以下是 std::unordered_map::at() 函数的语法。

name_of_Unordered_map.at(k)

参数

k − 访问其映射值的键值。

返回值

如果对象具有常量限定符,则方法返回对映射值的常量引用;否则返回对非常量值的引用。

示例 1

让我们考虑以下示例,我们将演示 std::unordered_map::at() 函数的使用。

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<char, int> um = {
      {'a', 1},
      {'b', 2},
      {'c', 3},
      {'d', 4},
      {'e', 5}
   };
   cout << "Value of key um['a'] = " << um.at('a') << endl;
   try {
      um.at('z');
   } catch(const out_of_range &e) {
      cerr << "Exception at " << e.what() << endl;
   }
   return 0;
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Value of key um['a'] = 1
Exception at _Map_base::at

示例 2

在下面的示例中,我们将返回映射中不存在的键,并观察输出。

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<char, int> um = {
      {'a', 1},
      {'b', 2},
      {'c', 3},
      {'d', 4},
      {'e', 5}
   };
   cout << "Value of key um['z'] = " << um.at('z') << endl;
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出:

terminate called after throwing an instance of 'std::out_of_range'
  what():  _Map_base::atAborted

示例 3

考虑以下示例,我们创建一个无序映射来存储学生的成绩,并使用 at() 函数更新成绩。

#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
   unordered_map<string,int> stu_marks = {
      {"Aman", 95},
      {"Vivek", 90},
      {"Sarika", 85},
      {"Ammu", 100}
   };
   stu_marks.at("Aman") = 100;
   stu_marks.at("Vivek") += 95;
   stu_marks.at("Sarika") += 92;
         
   for (auto& i: stu_marks) {
      cout<<i.first<<": "<<i.second<<endl;
   }
   return 0;
}

输出

以下是上述代码的输出:

Ammu: 100
Sarika: 177
Vivek: 185
Aman: 100

示例 4

以下示例声明一个无序映射,该映射具有整数类型键和字符类型值,并观察输出。

#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
   unordered_map<int,char> ASCII = {
      {65, 'a'},
      {66, 'b'},
      {67, 'c'},
      {68, 'd'}
   };
   cout << "Value of key ASCII 66 = " << ASCII.at(66) << endl;
   return 0;
}

输出

上述代码的输出如下:

Value of key ASCII 66 = b
广告