std::unordered_map::clear() 会不会比 std::map::clear() 慢,因为前者的清除操作是 "carried on"?
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
也有同样的问题吗?
谢谢
When will std::map::clear() going to be faster that std::unordered_map::clear()?
两者都具有线性渐近复杂度。您可以同时使用这两种方法来为您的代码计时,看看其中一种是否明显更快。
注意,如果元素的析构函数是non-trivial,那么所有容器的clear
具有线性复杂度。如果析构函数是微不足道的,那么唯一具有小于 clear
线性复杂度的标准容器是 std::vector
和 std::basic_string
.
关于以下案例:
- 将容器变大
- 清除
- 插入几个
- 清除
std::unordered_map
后清除成本高,用std::map
重现不是问题。
我正在阅读 unordered_map
实际上在元素数量 + 桶数量方面呈线性关系。
那么,假设我有代码,
向
添加任意数量的元素std::unordered_map
然后
clear()
std::unordered_map
重复多次。
如果我在整个执行过程中的任何一点都有很多元素(在第 1 步中),clear
时间也会在未来继续,使代码变慢。
但是,std::map
也有同样的问题吗?
谢谢
When will std::map::clear() going to be faster that std::unordered_map::clear()?
两者都具有线性渐近复杂度。您可以同时使用这两种方法来为您的代码计时,看看其中一种是否明显更快。
注意,如果元素的析构函数是non-trivial,那么所有容器的clear
具有线性复杂度。如果析构函数是微不足道的,那么唯一具有小于 clear
线性复杂度的标准容器是 std::vector
和 std::basic_string
.
关于以下案例:
- 将容器变大
- 清除
- 插入几个
- 清除
std::unordered_map
后清除成本高,用std::map
重现不是问题。