优先队列模板 其实就是大根堆和小根堆,代码中大根堆为big,小根堆为small; 注意小根堆定义时是greater,并且greater<int>后有一个空格,priority与queue中有一个下划线'_'; #include<cstdio> #include<queue> using namespace std; priority_queue<int> big;//大根堆 priority_queue<int,vector<int>,greater<int> > small;//小根堆 int main(){ int n; scanf("%d",&n); int i; for(i=1;i<=n;i++){ int k; scanf("%d",&k); big.push(k);small.push(k); } for(i=1;i<=n;i++){ printf("%d ",big.top());big.pop(); } printf("\n"); for(i=1;i<=n;i++){ printf("%d ",small.top());small.pop(); } return 0; } 对于结构体的堆 大根堆: priority_queue<data> que; struct data{ friend bool operator< (data d1,data d2){ return d1.v<d2.v; } int x,y,v; }; 小根堆: priority_queue<data> que; struct data{ friend bool operator< (data d1,data d2){ return d1.v>d2.v; } int x,y,v; }; 注意return后面的符号决定大小根堆(前提是 operator<)