我必须使用一种数据结构来保持元素以某种顺序排列,这样我就可以查询最少的元素并有效地插入新元素。所以我选择了
set ( C++ stl)
. 插入和删除最少元素需要log(n)
时间。log(n)
所以我写了以下程序:
#include<iostream>
#include<set>
#include<stdio.h>
using namespace std;
int main()
{
set<int>s1,s2;
set<int>::iterator it;
int tmp,i;
for(i=1;i<=1000000;i++)s1.insert(i);
for(i=1;i<=1000000;i++)
{
it=s1.begin();
s2.insert(*it);
s1.erase(s1.begin());
}
return 0;
}
但这在我的机器( i core 31.67
)上需要几秒钟,我预计会少得多,即我尝试了优先级队列,它也给了我相同的性能。那么我应该实现自己的堆以使其更快还是有其他方法?O(log(1000000)*1000000)
2*10^7