c++ - 来自 std::unordered_map 的以下命令之间是否有任何区别
问题描述
要将键值对插入到无序映射中,例如 ,std::unordered_pair<int,int> map1
我们可以通过以下两种方式中的任何一种来完成:
map1[2]=5;
map1.insert({2,5});
std_unordered_insert
使用or有什么区别operator[]
吗?
如果我想找到给定键的映射值,我可以使用以下任一方法:
mappedVal = map1.at(2);
mappedVal = map1[2];
std::unordered_map::at
同样,使用or之间有什么区别operator[]
?
解决方案
地图1[2]=5;
如果存在带有键的条目2
,则将该条目的值设置为5
。否则,使用 key2
和 value创建一个新条目5
。
map1.insert({2,5});
如果不存在带有 key的条目,则使用 key和 value2
创建一个新条目。否则,什么也不做。2
5
映射值 = map1.at(2);
如果存在带有键的条目,则将2
其值分配给mappedVal
。否则,抛出out_of_range
异常。
映射值 = map1[2];
如果存在带有键的条目,2
则将其值分配给 mappedVal。否则,创建一个2
使用默认值的条目并将该默认值分配给 mappedVal。
对于查找,我通常使用unordered_map::find()
而不是at()
或operator [] ()
(除非我知道给定键有一个条目)。
推荐阅读
- android - Crashlytics 发送有关崩溃的电子邮件。但是没有和邮件一样的崩溃
- reactjs - 为反应组件编写单元测试用例
- azure - 如何在防火墙中动态允许 Azure 数据中心 IP 地址
- dropdown - 无法以百分比而不是 px 值指定巨型菜单的大小
- java - Java android 谷歌地图 api 密钥
- css - 为什么当我传递参数时 React 前端会失去它的样式?
- node.js - 我应该如何使用 NodeJS 在 AWS Lambda 上处理 node_modules?
- arduino - 连接到 ESP8266 Ap 本身
- android - 用户从 Google Play 下载的应用程序崩溃
- asp.net-core-mvc - 在面向 .net 框架的 ASP.NET Core 项目中访问 System.Web.HttpContext.Current