news 2026/4/18 3:36:41

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/4/18 3:36:08

Python 爬虫实战:解析 JSON 数据接口的爬虫开发

前言 在网络数据采集领域&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为轻量级的数据交换格式&#xff0c;被绝大多数 Web 应用的接口所采用。相较于传统的 HTML 页面解析&#xff0c;JSON 接口爬取具有数据结构清晰、解析效率高、数据提取成本低等…

作者头像 李华
网站建设 2026/4/18 3:33:42

避开 35 岁职场危机:网络安全为何能成为越沉淀越吃香的赛道?

前几天我表弟小王来找我喝茶&#xff0c;聊着聊着突然问我&#xff1a;“老曹&#xff0c;你说我要不要转行做网络安全啊&#xff1f; 听说这行业挺赚钱的。 “我一听就笑了&#xff0c;这不正好最近我刚研究过这个行业吗&#xff1f; 我跟他说&#xff0c;别看现在各行各业…

作者头像 李华
网站建设 2026/4/18 3:35:33

Cesium中实现燕尾箭头、双向箭头等绘制

概要 Cesium中已经自带了多种形状的绘制&#xff0c;但是对于一些特殊的形状&#xff0c;需要我们自行定义。形状都是由点、线、面组成,对于复杂的图形其实可以拆解成多个简易形状组合而成。比如箭头可以看出是三角形和长方形的组合&#xff0c;但是这样做的话绘制的代码可能也…

作者头像 李华
网站建设 2026/4/17 20:31:29

22、Linux 系统进程管理与文本文件编辑全解析

Linux 系统进程管理与文本文件编辑全解析 1. 识别运行进程 在 Linux 系统中,了解系统的负载平均情况能反映出系统中进程对 CPU 时间的需求。例如,在一个四核 CPU 的系统上,负载平均为 4.0 意味着进程对 CPU 时间的需求恰好等于计算机所能提供的 CPU 时间。 w 命令可以告…

作者头像 李华
网站建设 2026/4/16 17:05:19

大岩资本黄铂:A股量化的未来是细节致胜

大岩资本黄铂&#xff1a;A股量化的未来是细节致胜近期&#xff0c;嘉石大岩私募证券基金管理有限公司总经理兼首席投资官黄铂出席了东南亚经济与金融论坛。会上&#xff0c;黄博士以量化投资的视角&#xff0c;分享了不同市场环境下Alpha的来源变化&#xff0c;以及量化策略未…

作者头像 李华
网站建设 2026/4/17 21:14:42

Manim实现闪电特效

1. 实现原理闪电特效通过LightningAnimation类实现&#xff0c;该类继承自Manim的基础Animation类&#xff0c;主要基于以下几个核心原理&#xff1a;1.1. 折线生成与随机偏移闪电的基本形状是通过在起点和终点之间创建多个带有随机偏移的转折点来实现的&#xff1a;# 初始化闪…

作者头像 李华