c++ unordered_map的用法

std::unordered_map 是 C++ 标准库中的一个容器,用于存储键值对(key-value pairs)。它提供了基于哈希表的实现,可以在常数时间内进行大部分插入、删除和查找操作。以下是关于 std::unordered_map 的用法,包括基本操作和示例代码。

1. 头文件

在使用 std::unordered_map 之前,需要包含相应的头文件:

#include <unordered_map>

2. 定义和初始化

可以使用以下方式定义和初始化 std::unordered_map

std::unordered_map<int, std::string> myMap; // 键为 int,值为 std::string

也可以使用初始化列表

std::unordered_map<int, std::string> myMap = {
    {1, "one"},
    {2, "two"},
    {3, "three"}
};

3. 基本操作

a. 插入元素

有几种方法可以插入元素:

myMap[4] = "four"; // 通过下标操作插入
myMap.insert({5, "five"}); // 使用 insert 方法
myMap.emplace(6, "six"); // 使用 emplace 直接构造对象
b. 查找元素

可以使用 find 方法或下标操作查找元素:

auto it = myMap.find(2); // 查找键为 2 的元素
if (it != myMap.end()) {
    std::cout << "Found: " << it->second << std::endl; // 输出对应的值
}

std::string value = myMap[3]; // 直接访问,若键不存在则插入默认值
c. 删除元素

可以使用 erase 方法删除元素:

myMap.erase(2); // 删除键为 2 的元素
d. 遍历元素

可以使用范围 for 循环遍历 unordered_map

for (const auto& pair : myMap) {
    std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
e. 获取大小和检查是否为空

可以使用 size 和 empty 方法:

std::cout << "Size: " << myMap.size() << std::endl; // 获取元素个数
if (myMap.empty()) {
    std::cout << "The map is empty." << std::endl;
}

4. 示例代码

以下是一个完整的示例代码,演示了 std::unordered_map 的基本用法:

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    // 定义一个 unordered_map
    std::unordered_map<int, std::string> myMap;

    // 插入元素
    myMap[1] = "one";
    myMap.insert({2, "two"});
    myMap.emplace(3, "three");

    // 查找元素
    auto it = myMap.find(2);
    if (it != myMap.end()) {
        std::cout << "Found: " << it->second << std::endl;
    }

    // 遍历元素
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    // 删除元素
    myMap.erase(1);
    
    // 输出大小
    std::cout << "Size after deleting key 1: " << myMap.size() << std::endl;

    return 0;
}

5. 注意事项

  • 哈希函数std::unordered_map 使用哈希函数来管理键的存储。默认情况下,使用标准的哈希函数,但可以提供自定义哈希函数。

  • 迭代顺序:由于使用哈希表,std::unordered_map 中元素的迭代顺序是不确定的。

  • 内存使用std::unordered_map 可能会比 std::map 使用更多的内存,因为它需要存储额外的信息(如哈希表的桶)。

  • 异常安全:大多数操作在异常安全方面是强的,尤其是在插入和删除时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值