C++中的unordered_map at()函数

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中的一个重要组成部分,在实际编程中应当加以熟练掌握,以便更好地应对各种情况。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程