关于priority_queue和set的常数问题
  • 板块学术版
  • 楼主Acc_Robin
  • 当前回复8
  • 已保存回复8
  • 发布时间2021/8/3 09:36
  • 上次更新2023/11/4 12:10:33
查看原帖
关于priority_queue和set的常数问题
383079
Acc_Robin楼主2021/8/3 09:36

这个人主页发现了一句话:

在1e4~1e5级别的数据下 set的耗时大概是priority_queue的40倍

于是做了一个小测试,分别比较 setpriority_queueinserterasepushpop 的运行时间:

代码:

#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();
}

10610^6 的数据下有

set insert : 0.95399
priority_queue push : 0.67991
set erase : 0.10204
priority_queue pop : 0.91303

setinsert()priority_queuepush() 慢是符合认知的,但为什么 seterase(begin()) 这么快???

erase(begin()) 改为 erase(i) 之后速度变慢了十倍……

求解

2021/8/3 09:36
加载中...