优先队列 priority_queue

19 篇文章 0 订阅

优先队列本质上还是属于队列的范畴,只不过多了一项功能,根据用户自定义的数据进行任意规则的动态排序。

它的模板声明包括三个参数,priority_queue(Type,Container,Functional)

第一个是数据类型,可以是整型、结构体类型、类类型等等,第二个参数是容器,一般是vector或者deque,第三个是比较函数,默认缺省的是vector,operator < ,也就是说默认排序是按照从大到小的顺序排的,因为优先队列是大顶堆,队头元素最大。

下面的程序分别是按照 基本数据类型从大到小排,从小到大排,类类型使用仿函数按指定元素从小到大排。

有一个概念需要解释一下,“仿函数”。所谓仿函数,就是使一个类的使用看上去像一个函数。其实现就是在类中实现一个operator(),这个类就拥有了类似函数的行为,就是一个仿函数类了。在C++中,我们通过在一个类中重载括号运算符的方法使用一个函数对象而不是一个普通函数。

#include <iostream>
#include <queue>
using namespace std;

int main(){
    priority_queue<int,vector<int>>que;
    int a[] = {3,1,5,2,8,8,0};
    for(int i=0;i<sizeof(a)/sizeof(int);i++){
        que.push(a[i]);
    }
    while(!que.empty()){
        cout<<que.top()<<" ";
        que.pop();
    }
    cout<<endl;
    return 0;
}



#include <iostream>
#include <queue>
using namespace std;

int main(){
    priority_queue<int,vector<int>,greater<int>>que;
    int a[] = {3,1,5,2,8,8,0};
    for(int i=0;i<sizeof(a)/sizeof(int);i++){
        que.push(a[i]);
    }
    while(!que.empty()){
        cout<<que.top()<<" ";
        que.pop();
    }
    cout<<endl;
    return 0;
}



#include <iostream>
#include <queue>
using namespace std;

class T{
public:
    int x;
    int y;
    int z;
    T(int a,int b,int c):x(a),y(b),z(c){}  //构造函数
};

struct cmp1{
    bool operator()(const T &t1,const T &t2){
        return t1.z > t2.z;      //根据z的值的大小进行排列
    }
};

int main(){
    priority_queue<T,vector<T>,cmp1>que;
    T a(1,2,3);
    T b(6,4,2);
    T c(7,5,6);
    que.push(a);
    que.push(b);
    que.push(c);
    while(!que.empty()){
        cout<<que.top().x<<" "<<que.top().y<<" "<<que.top().z<<endl;
        que.pop();
    }
    cout<<endl;
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值