优先队列(2.0)

STL应用

priority_queue<Type, Container, Functional>

三个参数:Type为数据类型,Container为保存数据的容器,Functional为数据的比较方式

比较方式默认用operator<,所以如果把后面2个参数缺省的话,优先队列就是大顶堆(降序),队头元素最大。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	priority_queue<int> q; //后面两个参数缺省会变为大顶堆 
	return 0;
} 

要想变为小顶堆

#include <bits/stdc++.h>
using namespace std;
int main()
{
	priority_queue<int,vector<int>,greater<int> > q;//小顶堆模板
	q.top(); //q.top()表示的是堆顶数据,是一个数
        q.pop(); //q.pop()是一种操作,把堆顶元素弹出去
        q.push(a); //a是要往这个堆里添加的数
        return 0;
}

加进去一个数后会自动排序

以上是对一种数操作的优先队列。

如果有两种数需要用优先队列处理怎么办?

别急,下面是优先队列+结构体用法:

首先定义一个结构体

struct node
{
    int a;
    int b;
};

然后重载operator(是这么说吗?)

struct cmp
{
    bool operator()(const node &e1,const node &e2)
    {
        if(e1.a==e2.a)
        {
            return e1.b>e2.b;
        }
        return e1.a>e2.a;
};

以上比较函数是:a小的靠前,若a相等,b小的靠前。

然后再定义优先队列:

priority_queue<node,vector<node>,cmp> q;

附赠:

vector()的操作及用法:https://blog.csdn.net/xiaoquantouer/article/details/51579148

 

 

 

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注