gpt4 book ai didi

c++ - STL图插入效率: [] vs.插入

转载 作者:IT老高 更新时间:2023-10-28 22:25:56 25 4
gpt4 key购买 nike

map 插入有两种方式:

m[key] = val;

或者

m.insert(make_pair(key, val));

我的问题是,哪种操作更快?人们通常说第一个比较慢,因为 STL 标准首先会在 map 中不存在“key”时“插入”一个默认元素,然后将“val”分配给默认元素。

但我不认为第二种方式更好,因为'make_pair'。与 pair<T1, T2>(key, val) 相比,make_pair 实际上是一种方便的“配对”方式.无论如何,他们都做了两个任务,一个是将“key”分配给“pair.first”,另一个是将“val”分配给“pair.second”。 pair 完成后,map 会插入 'pair.second' 初始化的元素。

所以第一种方法是 1. ' default construct of typeof(val) ' 2. 作业第二种方式是 1. assignment 2. ' copy construct of typeof(val) '

最佳答案

两者完成不同的事情。

m[key] = val;

如果 key 不存在,将插入一个新的键值对,或者如果 key 已经存在,它将覆盖映射到 key 的旧值。

m.insert(make_pair(key, val));

仅当 key 尚不存在时才会插入该对,它永远不会覆盖旧值。因此,请根据您想要完成的内容进行选择。
对于更有效的问题:profile。 :P 可能是我想说的第一种方式。分配(又名拷贝)是两种方式的情况,因此唯一的区别在于构造。众所周知并且应该实现,默认构造基本上应该是无操作的,因此非常有效。拷贝就是这样 - 拷贝。所以在方式一中我们得到一个“no-op”和一个拷贝,在方式二中我们得到两个拷贝。
编辑:最后,相信你的分析告诉你的。我的分析不像@Matthieu 在他的评论中提到的那样,但这是我的猜测。 :)


然后,我们有 C++0x 来了,第二条路上的双重复制将是无效的,因为现在可以简单地移动这对。所以最后,我想还是回到我的第一点:用正确的方式完成你想做的事情。

关于c++ - STL图插入效率: [] vs.插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5692187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com