news 2026/6/14 15:00:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()或迭代器

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 5:13:20

通信系统仿真:通信系统基础理论_(9).通信网络基础

通信网络基础 1. 通信网络概述 1.1 通信网络的定义 通信网络是指由多个节点(如计算机、电话、路由器等)通过通信链路(如光纤、电缆、无线信道等)相互连接,能够进行数据传输和交换的系统。通信网络的基本功能包括数据的发送、接收、转发和存储。通信网络的结构和工作原理…

作者头像 李华
网站建设 2026/6/13 22:10:05

Python 爬虫实战:详解 requests 库发送 GET/POST 请求

前言 在 Python 爬虫开发中&#xff0c;HTTP 请求是与目标网站交互的核心环节&#xff0c;而requests库凭借其简洁易用、功能强大的特性&#xff0c;成为处理 HTTP 请求的首选工具。相较于 Python 内置的urllib库&#xff0c;requests极大简化了请求构造、响应处理、Cookie 管…

作者头像 李华
网站建设 2026/6/13 13:27:26

企业级ELK:从日志收集到业务驱动

针对企业级ELK应用的最佳实践&#xff0c;其核心已从简单的“日志收集工具”演进为驱动系统稳定、赋能业务增长的工程体系。最佳实践可总结为&#xff1a;一个中心思想、三个关键阶段和六个核心实施要点。 一、核心理念与实施框架 核心理念&#xff1a;日志治理不是一次性的工…

作者头像 李华
网站建设 2026/6/10 12:52:42

Win11共享打印0x0000bc4,三步解决共享难题

一、检查共享设置与网络配置Win11共享打印0x0000bc4可先从基础设置错误&#xff0c;多数情况是网络或权限配置遗漏导致。2.1 启用共享基础功能设置网络配置文件&#xff1a;打开「设置→网络和Internet→高级网络设置」&#xff0c;将当前网络设为「专用」&#xff0c;公用网络…

作者头像 李华