在这个人主页发现了一句话:
在1e4~1e5级别的数据下 set的耗时大概是priority_queue的40倍
于是做了一个小测试,分别比较 set 和 priority_queue 中 insert、erase 和 push、pop 的运行时间:
代码:
#include<bits/stdc++.h>
using namespace std;
set<int>s;
priority_queue<int>q;
clock_t bg;
const int N = 1e6;
int main(){
bg=clock();
for(int i=1;i<=N;++i)s.insert(i);
printf("set insert : %.5lf\n",1.*(clock()-bg)/CLOCKS_PER_SEC),bg=clock();
for(int i=1;i<=N;++i)q.push(i);
printf("priority_queue push : %.5lf\n",1.*(clock()-bg)/CLOCKS_PER_SEC),bg=clock();
for(int i=1;i<=N;++i)s.erase(s.begin());
printf("set erase : %.5lf\n",1.*(clock()-bg)/CLOCKS_PER_SEC),bg=clock();
for(int i=1;i<=N;++i)q.pop();
printf("priority_queue pop : %.5lf\n",1.*(clock()-bg)/CLOCKS_PER_SEC),bg=clock();
}
在 106 的数据下有
set insert : 0.95399
priority_queue push : 0.67991
set erase : 0.10204
priority_queue pop : 0.91303
set 的 insert() 比 priority_queue 的 push() 慢是符合认知的,但为什么 set 的 erase(begin()) 这么快???
将 erase(begin()) 改为 erase(i) 之后速度变慢了十倍……
求解