【发布时间】:2020-06-26 13:56:07
【问题描述】:
当我使用std::map 时,根据所使用的方法,访问元素所需的时间似乎不同。
第一种方法:直接访问
cnt += umap[t];
第二种方法:
if (umap.find(t) != umap.end()){
cnt += umap[t];
}
第二种方法似乎比第一种方法快很多,我不明白为什么。有人能解释一下这两种方法的区别吗?
【问题讨论】:
-
你是如何测量时间的?你是如何编译代码的?优化开启了吗?你使用了什么编译器和标志?为什么你认为一个比另一个快会有问题?
-
我们可以得到这个基准的minimal reproducible example 吗?根据数据集和您正在执行的操作,可能会有差异,也可能没有差异。
-
umap[t]如果默认值不存在条目,则创建新条目。使用if检查您正在阻止创建新项目。 -
请注意,这 2 个 sn-ps 正在做不同的事情。第一个可以增加地图大小,肯定会有性能差异。
-
(我保证至少有一个人会从上面的评论中发现
if's init-statement)