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

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

测试代码:

测试结果:

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

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

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

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

posted @ 2018-10-08 12:08  张一清  阅读(917)  评论(0编辑  收藏  举报
友情链接:回力 | 中老年女装 | 雅思培训 | SAT培训 | 雅思和托福