优先队列

img

从大到小:

priority_queue<int,vector<int>,less<int>>p;

从小到大:

priority_queue<int,vector<int>,greater<int>>q;

优先队列里放 pair :

typede pair<LL,int>PII;
vector<PII>ans;
priority_queue<PII,vector<PII>,greater<PII>>que;

这里是首先让第一元素从小到大排序,当第一元素相等时,再按第二元素从大到小排序。

优先队列自定义重载:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef long long LL;

const int maxn = 1e5 + 5;

struct X{
    int a,b;
    X () {}
    X (int aa,int bb) {
        a = aa,b = bb;
    }
    friend bool operator < (const X A, const X B){
        if(A.a == B.a) return A.b > B.b; //这里是反过来的,小于就是大于,大于就是小于。
        else return A.a > B.a;
    }
};

X ans[maxn];
priority_queue <X> pq;

int main(){
    ans[1].a = 1;
    ans[1].b = 2;
    ans[2].a = 2;
    ans[2].b = 1;
    ans[3].a = 1;
    ans[3].b = 3;
    pq.push(ans[1]);
    pq.push(ans[3]);
    pq.push(ans[2]);
    while(!pq.empty()){
        X k = pq.top();
        pq.pop();
        printf("%d %d\n",k.a,k.b);
    }
}

输出:
1 2
1 3
2 1
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dreams___/article/details/79971841
个人分类: 随笔
上一篇马拉车
下一篇POJ-1141-Brackets Sequence
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭