将整数推入向量,然后将整个向量的排序更快或更慢,而不是将整数插入到一个集合中,该集合在您输入时进行排序。对不起,我是c ++的新手,我不知道如何使用时钟功能。有人可以帮忙吗?任何帮助将不胜感激。提前谢谢。
#include <vector>
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
vector<int> possibility1;
set<int> possibility2;
int main()
{
random_device rd;
mt19937 rng(rd());
uniform_int_distribution<int> uni(0,1000);
// possibility 1
for(int i = 0; i < 1000000; i++) {
int r = uni(rng);
possibility1.push_back(r);
}
// possibility 2
for(int j = 0; j < 1000000; j++) {
int r = uni(rng);
possibility2.insert(r);
}
}
修改
对于这种情况,时间上的差异并不重要,但是如果我有大量具有大量私有变量的类,并且创建一个矢量/一组对象(也有一个比较函数),那么会更快吗?
答案 0 :(得分:4)
将整数放入向量,然后更快地排序,或将整数放入集合
两者都具有相同的渐近复杂度O(n log n)。
Set是一个更复杂的数据结构,它肯定会有更高的有效序数系数,因此在实践中会因某种因素而比排序向量慢。
复杂性差异是否对程序的性能有任何重大影响,取决于数据结构的大小是否与其他复杂性源相比足够显着。这可以使用分析器进行测量。
但是,例如,如果您需要保持数据结构在插入之间,而不是仅在所有插入之后,那么设置将比渐近向量渐近地更简单O(n log n)为O(n 2 )。
渐近复杂度仅保证超出某些输入阈值,set将更有效。但由于系数较小,对于低于阈值的输入,矢量可能仍然更快。许多因素会影响阈值,例如硬件。要查找特定系统的阈值,您可以使用分析器进行测量。