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

优先队列的基本用法(初步)

程序员文章站 2022-07-14 12:22:01
...

优先队列的基本用法(初步)

优先队列实际上就是堆,可以用它来维护大根堆和小根堆

//优先队列
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
priority_queue<int> da;   //大根堆
priority_queue<int, vector<int>, greater<int> > xiao;  //小根堆,两个>之间要有空格
int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        int u; cin >> u;
        da.push(u);
        xiao.push(u);
    }
    cout << da.top();
    cout << endl << xiao.top();
    return 0;
 } 

重载运算符(较难理解)

#include<cstdio>
#include<cstdlib>
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
struct cmp
{
    bool operator () (const int a, const int b)    //如果a的优先级比b小返回true 
    {
        return a % 10 > b % 10;   //定义“优先级小”为 a % 10 > b % 10时,a的优先级小 
    }
};

priority_queue<int> q;    //按照优先级从大到小排列 ,即把a拍在后面 

int main()
{
    q.push(18);
    q.push(21);
    cout << q.top();
    return 0;
}

当然还有很多复杂而神奇的用法,但是对我目前用处不大,先不深入了解