unordered_map 学习

unordered_map中迭代器的使用

std::unordered_map的迭代器(iterator)是一种可以遍历容器中所有元素的对象。可以使用迭代器来访问、修改或删除unordered_map中的元素。迭代器就像是指向容器中元素的指针或引用。

以下是如何使用std::unordered_map迭代器的几个基本示例:

#include <iostream>
#include <unordered_map>

int main() {
std::unordered_map<int, int> myMap = {{1, 10}, {2, 20}, {3, 30}};

// 使用迭代器遍历unordered_map
for (std::unordered_map<int, int>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}

// 使用基于范围的for循环遍历unordered_map(C++11及更高版本)
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}

return 0;

在这个例子中,我们使用了两种遍历unordered_map的方法:

  1. 使用传统的迭代器(it)和begin()end()成员函数。在循环内部,我们使用it->firstit->second来分别访问键和值。
  2. 使用基于范围的for循环(C++11及以上版本),它更简洁易读。通过const auto& pair,我
    们可以直接访问每个键值对。

unordered_map中方括号的使用

std::unordered_map中,方括号[]操作符被重载以提供对容器中元素的访问,同时还能够在键不存在时自动插入新元素。使用方括号时,如果请求的键已经存在于unordered_map中,它会返回该键对应的值;如果键不存在,unordered_map会插入一个新元素,其键为请求的键,值默认为该类型的默认值(对于基本类型如int,默认值为0)。

这里有一些std::unordered_map中方括号的使用示例:

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> myMap;

    // 使用方括号插入元素
    myMap["apple"] = 5;
    myMap["banana"] = 10;

    // 使用方括号访问已存在的元素
    std::cout << "Number of apples: " << myMap["apple"] << std::endl;

    // 尝试访问不存在的元素,会自动插入该元素,值为int类型的默认值0
    std::cout << "Number of oranges (default value): " << myMap["oranges"] << std::endl;
    // 此时myMap中包含了键为"oranges"的元素,其值为0

    // 修改已存在的元素的值
    myMap["banana"] = 20;
    std::cout << "New number of bananas: " << myMap["banana"] << std::endl;

    return 0;
}

在上面的代码中,我们首先创建了一个std::unordered_map,其键类型为std::string,值类型为int。我们使用方括号[]来插入元素,并给它们赋值。当我们尝试访问一个不存在的键时(例如"oranges"),unordered_map会自动插入这个键,并将其值初始化为int类型的默认值0

需要注意的是,由于方括号操作符在键不存在时会插入新元素,因此如果你只是想检查一个键是否存在而不希望改变unordered_map的内容,你应该使用find成员函数或者count成员函数,或者使用at成员函数(但at会在键不存在时抛出std::out_of_range异常)。

这里是一个使用find检查键是否存在的示例:

if (myMap.find("oranges") != myMap.end()) {
    std::cout << "Oranges exist in the map." << std::endl;
} else {
    std::cout << "Oranges do not exist in the map." << std::endl;
}

在这个例子中,find函数返回一个迭代器,如果找到了键,则返回指向该键的迭代器;如果没有找到,则返回end()迭代器。通过比较返回的迭代器与end()迭代器,我们可以确定键是否存在。

其他基本操作

map.size();

map.erase();

map.insert();

it = map.find(); if(it != map.end());

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值