欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

优先队列

程序员文章站 2022-03-31 08:09:02
...

优先队列

从大到小:

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