当前位置: 首页 > news >正文

C++ 中 unordered_map 的 at() 和 []

在 C++ 中,unordered_mapat()[]都可以访问元素,但它们在行为上有重要区别:

  1. []运算符
unordered_map<string,int>m={{"apple",1}};m["apple"]=2;// 修改已存在的元素m["banana"]=3;// 如果"banana"不存在,会创建并插入,值被值初始化(int为0)intval=m["orange"];// 会创建"orange"键,值为0

特点:
• 如果键不存在,会自动插入该键(值被默认构造)
• 可用于插入新元素
• 返回值的引用
• 不是const成员函数,不能在const unordered_map上使用

  1. at()方法
unordered_map<string,int>m={{"apple",1}};intval1=m.at("apple");// 正常访问,返回1intval2=m.at("banana");// 抛出 std::out_of_range 异常

特点:
• 如果键不存在,抛出std::out_of_range异常
• 不会插入新元素
• 有const版本,可以在const unordered_map上使用
• 更加安全,能避免意外插入

  1. 关键区别对比
特性operator[]at()
键不存在时插入新键值对抛出异常
可否用于插入
异常安全性不抛异常std::out_of_range
const版本
返回类型引用引用(const或非const
  1. 使用建议
// 推荐做法:unordered_map<string,int>m;// 检查键是否存在再访问if(m.find("key")!=m.end()){intval=m["key"];// 或 m.at("key")}// 使用 at() 进行安全访问try{intval=m.at("key");}catch(conststd::out_of_range&e){// 处理键不存在的情况}// 使用 [] 进行插入或修改m["new_key"]=10;// 直接插入// 遍历访问(安全)for(constauto&[key,value]:m){// 安全访问,不会插入新元素}
  1. 总结

• 想检查键是否存在时:用find()contains()(C++20)
• 确保键存在时:用at()更安全
• 想插入或修改时:用[]
• 访问constmap 时:只能用at()或迭代器

http://www.cnnetsun.cn/news/115667.html

相关文章:

  • 通信系统仿真:通信系统基础理论_(11).光通信技术
  • 17、Linux文件与目录操作全解析
  • 21、Linux系统进程与包管理全解析
  • 二叉排序树的插入、先序/中序/后序/层次遍历、节点查询
  • 如何在 Spring Boot 中接入 Amazon ElastiCache
  • 基于51单片机的血糖步数测量仪
  • Linux C/C++ 学习日记(51):内存池
  • AAAI25|基于神经共形控制的时间序列预测模型
  • CATCH:ICLR 2025 最值得关注的时间序列异常检测新框架
  • 开发到生产全链路:Docker containerd Kubernetes 运行时全景指南
  • 文件包含漏洞终极指南
  • #扫雷游戏
  • Java计算机毕设之基于springboot+vue的高校学院校内订餐系统的设计与实现基于JAVA的学院校内订餐系统的实现(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序计算机毕设之基于微信跑腿小程序的设计与实现基于springboot+微信小程序的跑腿小程序的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序计算机毕设之基于springboot+微信小程序的餐厅预约系统设计与实现基于微信小程序的餐厅预约系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • torch报错:ibtorch_cpu.so: cannot enable executable stack as shared object requires: Invalid argument
  • 计算机小程序毕设实战-基于springboot+微信小程序的餐厅预约系统设计与实现基于SpringBoot的在线点餐系统微信小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【课程设计/毕业设计】基于微信小程序跑腿平台的设计与实现代码基于springboot+微信小程序的跑腿小程序的设计与实现【附源码、数据库、万字文档】
  • jquery的基本使用(2)
  • HTML5结合Vue3实现超大文件分片上传的加密传输方案?
  • 基于增量动力分析方法IDA求解易损性曲线的Matlab代码探秘
  • mysql面试题整理
  • 瞄准科技特长生!3 大核心编程考级赛事(CTL/YCL/GESP)深度对比
  • day38打卡
  • JavaEE进阶——SpringBoot日志从入门到精通
  • 结构体简单题
  • 时间序列回归预测:LSTM、CNN - LSTM、PSO - CNN - LSTM、GAPSO - CNN - LSTM大比拼
  • 飞轮储能系统的建模与 MATLAB 仿真:永磁同步电机作为飞轮驱动电机
  • 车间进度总卡壳?生产小工单的3个必备功能,90%企业都用错了
  • 如何用 ShedLock 让 Spring Boot 的定时任务在多实例环境下只执行一次