news 2026/5/7 13:18:52

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/5/3 14:03:42

通信系统仿真:通信系统基础理论_(8).抗干扰技术

抗干扰技术 1. 引言 在通信系统中,信号的传输会受到各种干扰的影响,这些干扰可能来自自然环境(如电磁波、雷电等)或人为因素(如其他通信系统、电子设备等)。这些干扰会降低通信系统的性能,导致信号失真、误码率增加等问题。因此,研究和应用抗干扰技术是非常重要的。本…

作者头像 李华
网站建设 2026/5/7 6:52:27

Python 爬虫实战:从零搭建第一个网页爬虫

前言 在数据驱动的时代&#xff0c;网页爬虫作为获取互联网公开数据的核心技术&#xff0c;已成为 Python 开发者必备的技能之一。无论是数据分析、竞品调研还是内容聚合&#xff0c;爬虫都能高效地将分散在网页中的结构化、非结构化数据整合为可利用的格式。本文将从零基础出…

作者头像 李华
网站建设 2026/5/6 1:01:34

28、Linux 用户账户与权限管理全攻略

Linux 用户账户与权限管理全攻略 在 Linux 系统中,账户管理和权限使用是保障系统安全和正常运行的关键环节。下面将详细介绍如何安全使用 root 权限、管理用户账户和创建用户组。 安全使用 root 权限 root 权限在 Linux 系统中拥有极大的权力,但同时也伴随着很高的风险。一…

作者头像 李华