priority_queue

来源:互联网 发布:如何删除wifi连接网络 编辑:程序博客网 时间:2024/05/15 22:01

优先队列模板

其实就是大根堆和小根堆,代码中大根堆为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<)
0 0