STL映射插入效率:[] vs. insert
|
映射插入有两种方法:
m[key] = val;
要么
m.insert(make_pair(key, val));
我的问题是,哪个操作更快?
人们通常说第一个比较慢,因为如果地图中不存在“键”,则STL标准首先“插入”默认元素,然后将“ val”分配给默认元素。
但是我看不出第二种方法会更好,因为\'make_pair \'。与pair<T1, T2>(key, val)
相比,make_pair实际上是制作\'pair \'的便捷方法。无论如何,他们两个都执行两个分配,一个是将\'key \'分配给\'pair.first \',而两个是将\'val \'分配给\'pair.second \'。配对后,map插入由\'pair.second \'初始化的元素。
所以第一种方法是1. \'default construct of typeof(val)
\'2.赋值
第二种方式是1.分配2. \'copy construct of typeof(val)
\'
没有找到相关结果
已邀请:
6 个回复
姬第柔炒
如果
不存在,则将插入一个新的键-值对,否则将覆盖映射到
的旧值。
仅当ѭ6不存在时才插入该对,它将永远不会覆盖旧值。因此,根据要完成的任务进行选择。 对于这个问题,更有效的是:配置文件。 :P也许是我要说的第一种方法。两种方式都是这种情况(又称副本),因此唯一的区别在于构造。众所周知并且应该实现,默认构造基本上应该是无操作的,因此非常有效。副本就是那个副本。因此,以一种方式我们得到一个“无操作”和一个副本,以一种方式我们得到两个副本。 编辑:最后,相信您的配置文件告诉您什么。我的分析不像@Matthieu在其评论中提到的那样,但这是我的猜测。 :) 然后,我们有了C ++ 0x,第二种方式的双份副本将一无所获,因为现在可以轻松移动它们。因此,最后,我认为这取决于我的第一点:使用正确的方法来完成您想做的事情。
孝箱捆讨
产生:
或重复运行时具有相似的值。因此,在这种情况下,insert快一些。
抹持奠糙驰
如果您给出了很好的提示(通常情况是您知道要在地图的后面添加内容),则可以将'insert \'操作减少到固定时间(从log(n)开始)。
嗜蒂谷尘旱
闪票仇门韧
咳累录酬