在算法挑战网站上进行测试时,我遇到了这个问题,其中std::unordered_set
在使用范围为基础的init时(有点勉强)使我的速度变慢了:
void test(vector<int>& nums1) {
unordered_set<int> set1(nums1.begin(), nums1.end());
}
比...慢
vector<int> test(vector<int>& nums1) {
unordered_set<int> set1;
for (auto num : nums1) {
set1.insert(num);
}
}
该如何解释?
答案 0 :(得分:1)
我做了一个简单的基准测试:
--------------------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------------------
from_range<int>/256 13998 ns 13998 ns 50128
from_inserts<int>/256 16543 ns 16542 ns 41822
from_range<int>/512 27573 ns 27573 ns 25060
from_inserts<int>/512 36691 ns 36691 ns 19426
from_range<int>/4096 246584 ns 246584 ns 2881
from_inserts<int>/4096 335115 ns 335111 ns 2111
from_range<int>/32768 2401152 ns 2401123 ns 291
from_inserts<int>/32768 3398496 ns 3398509 ns 204
from_range<int>/262144 29351062 ns 29351113 ns 23
from_inserts<int>/262144 52871572 ns 52871542 ns 12
from_range<int>/1048576 245771472 ns 245772469 ns 3
from_inserts<int>/1048576 445421451 ns 445415603 ns 2
已与g++ -O3 -m64 -march=native
(GCC版本8.3.0)一起编译。