Der*_*huk 2 c++ stl insert set
对于以下质量插入,因为输入是有序的,是否有任何(轻微)优化?
set<int> primes;
for ( int i = 2; i <= 2000000; i++ ) {
primes.insert(i);
}
// then follows Sieve of Eratosthenes algorithm
Run Code Online (Sandbox Code Playgroud)
新改进,速度提高一倍:
set<int> primes;
for ( int i = 2; i <= 2000000; i++ ) {
primes.insert(primes.end(), i);
}
// then follows Sieve of Eratosthenes algorithm
Run Code Online (Sandbox Code Playgroud)
来自http://www.cplusplus.com/reference/stl/set/set/
vector<int> numbers;
for (int i=2; i<=2000000; ++i)
numbers.push_back(i);
set<int> primes(numbers.begin(), numbers.end());
Run Code Online (Sandbox Code Playgroud)
这应该具有O(n)复杂度,其中你的O(n*log(n))复杂度.
引用的链接表示,当您使用基于迭代器的构造函数时,如果迭代器已排序,那么您将获得线性.但是,我没有看到任何关于如何显式通知构造函数它是一个已排序的迭代器的明确说明.
对于更干净的东西,我宁愿使用boost的计数迭代器.这缩短为:
set<int> primes(
boost::counting_iterator<int>(0),
boost::counting_iterator<int>(200000));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2896 次 |
| 最近记录: |