为了账号安全,请及时绑定邮箱和手机立即绑定

在STL映射中,使用map :: insert比[]更好吗?

在STL映射中,使用map :: insert比[]更好吗?

C++
蛊毒传说 2019-11-05 10:48:27
前一段时间,我与一位同事讨论了如何在STL 映射中插入值。我更喜欢, map[key] = value; 因为它感觉自然并且易于阅读,而他更喜欢 map.insert(std::make_pair(key, value))我只是问过他,我们俩都不记得插入更好的原因,但是我确信这不仅是一种样式偏好,而且还有诸如效率之类的技术原因。在SGI STL参考只是说“严格地说,这个成员函数是不必要的:它的存在只是为了方便。”谁能告诉我这个原因,还是我只是梦想有一个原因?
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

对于地图中已存在的键,两者具有不同的语义。因此它们并不是真正可直接比较的。

但是operator []版本需要默认构造值,然后进行赋值,因此,如果这比复制构造要昂贵的多,那么它将更昂贵。有时默认构造没有意义,因此不可能使用operator []版本。


查看完整回答
反对 回复 2019-11-05
?
九州编程

TA贡献1785条经验 获得超4个赞

另一件事要注意std::map

myMap[nonExistingKey];会在地图中创建一个新条目,并键入键nonExistingKey初始化为默认值。

当我第一次看到它时,这使我感到非常恐惧(同时将我的脑袋撞向一个残旧的错误)。没想到的。对我来说,这看起来像是get操作,而且我没想到会有“副作用”。不想map.find()从你的地图时获得。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 791 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信