提问人:MangoPizza 提问时间:5/17/2022 最后编辑:MangoPizza 更新时间:5/17/2022 访问量:418
std::unordered_map::clear() 会比 std::map::clear() 慢吗,因为前者“进行”了 clear 操作?
Will std::unordered_map::clear() be slower than std::map::clear() because clear operations are "carried on" in the former?
问:
我正在阅读这篇文章,从我能得到的是,实际上元素数量+桶的数量是线性的。unordered_map
所以,比方说,我有代码,它
将任意数量的元素添加到
std::unordered_map
然后
clear()
std::unordered_map
重复多次。
如果我在总执行的任何一点(在第 1 步中)都有很多元素,那么时间也会在将来继续,使代码变慢。clear
但是,同样的问题也是吗?std::map
谢谢
答:
1赞
eerorika
5/17/2022
#1
std::map::clear() 什么时候会比 std::unordered_map::clear() 更快?
两者都具有线性渐近复杂度。您可以使用两者来计时代码,以查看其中任何一个是否明显更快。
请注意,如果元素的析构函数是非平凡的,则所有容器都具有线性复杂度。如果析构函数是微不足道的,则唯一复杂度小于 和 的标准容器是 和 。clear
clear
std::vector
std::basic_string
关于以下情况:
- 将容器扩大到大
- 清楚
- 插入几个
- 清楚
后者的成本显然很高,适用于不是一个重现的问题。std::unordered_map
std::map
评论
0赞
MangoPizza
5/17/2022
你好,看来我没有正确解释这个问题。我已经编辑了它以更好地反映我的问题。谢谢
0赞
MangoPizza
5/17/2022
“后者的成本显然很高,适用于不是一个复制的问题。”这正是我所需要的。谢谢std::unordered_map
std::map
0赞
MangoPizza
5/17/2022
事实上,当我为代码计时时。 在 中工作并在 中工作。有很大的不同!map
78ms
unordered_map
1500ms
评论
clear
clear
clear
clear
unordered_map
clear()
1000
clear()
memset
int(2e6) + 69
std::map
没有任何桶,它是一个树状结构。树不见了之后。clear()