前一段时间,我与一位同事讨论了如何在STL 映射中插入值。我更喜欢, map[key] = value; 因为它感觉自然并且易于阅读,而他更喜欢 map.insert(std::make_pair(key, value))我只是问过他,我们俩都不记得插入更好的原因,但是我确信这不仅是一种样式偏好,而且还有诸如效率之类的技术原因。在SGI STL参考只是说“严格地说,这个成员函数是不必要的:它的存在只是为了方便。”谁能告诉我这个原因,还是我只是梦想有一个原因?
3 回答
青春有我
TA贡献1784条经验 获得超8个赞
对于地图中已存在的键,两者具有不同的语义。因此它们并不是真正可直接比较的。
但是operator []版本需要默认构造值,然后进行赋值,因此,如果这比复制构造要昂贵的多,那么它将更昂贵。有时默认构造没有意义,因此不可能使用operator []版本。
九州编程
TA贡献1785条经验 获得超4个赞
另一件事要注意std::map
:
myMap[nonExistingKey];
会在地图中创建一个新条目,并键入键nonExistingKey
初始化为默认值。
当我第一次看到它时,这使我感到非常恐惧(同时将我的脑袋撞向一个残旧的错误)。没想到的。对我来说,这看起来像是get操作,而且我没想到会有“副作用”。不想map.find()
从你的地图时获得。
- 3 回答
- 0 关注
- 791 浏览
添加回答
举报
0/150
提交
取消