【发布时间】:2020-10-03 22:19:51
【问题描述】:
当我执行 unordered_set::find 时
unordered_set<int> uniqueNum;
//code...
if(uniqueNum.find(num + k) != uniqueNum.end())
//code ...
这段代码的运行时间比
快unordered_set<int> uniqueNum;
//code...
if(find(uniqueNum.begin(), uniqueNum.end(), num + k) != uniqueNum.end())
//code...
根据参考,unordered_set::find 是 "Worst case: linear in container size" 而 find 是“在第一个和最后一个之间的距离上达到线性:比较元素直到找到匹配”。
它们不是相同的运行时吗?为什么我运行代码时 unordered_set::find 更快? std::find 是否在做我错过的幕后工作?
【问题讨论】:
-
如果它不比线性搜索快,那它有什么用呢?
-
@SamVarshavchik 抱歉澄清一下,我知道运行我自己的代码会更快,但我不明白为什么。据我了解,它们都是 O(N) 运行时,但 unordered_set::find 完成速度更快。
-
unordered_set 是一个哈希集,因此它的查找在最坏的情况下是线性的,但平均时间是恒定的。我猜 std::find for unordered_set 迭代器将遍历所有元素,这就是为什么它总是线性的。
标签: c++ set runtime unordered-set