码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Map相同key是否覆盖问题分析

时间:2018-10-08 12:34:43      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:unique   atom   情况下   c++   测试结果   源码   标准库   原因   val   

C++的标准库关联容器map是不允许有key相同的键值对存在的。那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗?

测试代码:

测试结果:

从测试结果我们可以得出结论

从测试结果我们可以看出,使用insert()插入元素的方式并不能覆盖掉相同key的值;而使用[]方式则可以覆盖掉之前的值。为什么会出现这样的结果呢?

我们可以通过源码来找原因,在map的源码中,insert方法是这样定义的:

他调用_M_t.insert_unique(_x)方法,该方法会首先遍历整个集合,判断是否存在相同的key,如果存在则直接返回,放弃插入操作。如果不存在才进行插入。
而[]方式是通过重载[]操作符来实现的,它直接进行插入或覆盖。

C++ Map相同key是否覆盖问题分析

标签:unique   atom   情况下   c++   测试结果   源码   标准库   原因   val   

原文地址:https://www.cnblogs.com/zhangyiqinga/p/9753623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!