C++中的unordered_map at()函数
在C++语言中,unordered_map是一种关联容器(associative container),可以用来快速存储和访问键值对(key-value pairs)。它的底层实现采用哈希表(hash table)算法,可以在常数时间复杂度下进行插入、查找、删除、修改等操作。
在unordered_map中,我们可以使用at()函数来访问特定键所对应的值。at()函数的语法如下:
mapped_type& at(const key_type& k);
const mapped_type& at(const key_type& k) const;
该函数会根据给定的键k,在unordered_map中查找对应的值,并返回一个对该值的引用。如果unordered_map中没有该键,则函数会抛出一个out_of_range异常。
下面我们来看一些at()函数的示例用法。
示例1:访问unordered_map中的值
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> my_map = {
{"Alice", 18},
{"Bob", 20},
{"Charlie", 22}
};
cout << "Alice's age is " << my_map.at("Alice") << endl;
cout << "Bob's age is " << my_map.at("Bob") << endl;
cout << "Charlie's age is " << my_map.at("Charlie") << endl;
return 0;
}
上面的代码创建了一个unordered_map对象,并向其中插入了三个键值对,分别表示三个人的姓名和年龄。然后,我们使用at()函数来访问unordered_map中的值,并输出到控制台上。
运行程序,我们可以看到以下输出:
Alice's age is 18
Bob's age is 20
Charlie's age is 22
示例2:修改unordered_map中的值
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> my_map = {
{"Alice", 18},
{"Bob", 20},
{"Charlie", 22}
};
my_map.at("Alice") = 19;
my_map.at("Bob") += 1;
my_map.at("Charlie")++;
cout << "Alice's age is " << my_map.at("Alice") << endl;
cout << "Bob's age is " << my_map.at("Bob") << endl;
cout << "Charlie's age is " << my_map.at("Charlie") << endl;
return 0;
}
上面的代码示范了如何使用at()函数来修改unordered_map中的值。我们将Alice的年龄修改为19,Bob的年龄加1,Charlie的年龄也加1,并输出修改后的值。
运行程序,我们可以看到以下输出:
Alice's age is 19
Bob's age is 21
Charlie's age is 23
示例3:处理unordered_map中的异常
#include <iostream>
#include <unordered_map>
#include <stdexcept>
using namespace std;
int main() {
unordered_map<string, int> my_map = {
{"Alice", 18},
{"Bob", 20},
{"Charlie", 22}
};
try {
cout << "David's age is " << my_map.at("David") << endl;
} catch (const out_of_range& oor) {
cerr << "David's age not found in map: " << oor.what() << endl;
}
return 0;
}
上面的代码演示了如何处理at()函数可能抛出的out_of_range异常。我们尝试使用at()函数访问unordered_map中并不存在的键David,并在catch语句块中捕获并处理异常。
运行程序,我们可以看到以下输出:
David's age not found in map: unordered_map::at
总结
在C++语言中,unordered_map是一种非常实用的数据结构,可以用来存储和访问键值对。at()函数是unordered_map中的一个关键函数,可以用来访问指定键所对应的值,并在操作unordered_map时,我们应该始终保证键值对的唯一性,同时要注意异常的处理,防止程序崩溃。
总之,at()函数作为unordered_map中的一个重要组成部分,在实际编程中应当加以熟练掌握,以便更好地应对各种情况。