priority_queue 优先队列容器

      优先队列是一种容器适配器,他的第一个元素(位于头部top)总是队列中最大的元素,这里的"最大"是指队列元素的严格弱序中的"最大"。严格弱序是一系列数或事物按照一定的比较关系"<"排列得出的序列,"<"可以是数学中进行数值比较的大于,也可以是小于,还可以是其他含义。
      priority_queue 优先队列容器使用堆排序算法,每次将最大值或最小值出列。时间复杂度为O(nlogn)。
      创建一个优先队列的格式为 priority_queue<T, Container, Compare>,可以看出,创建一个优先队列默认需要三个参数(实际应用上有些参数可以省去)。参数解释:
                      T: 队列中元素的数据类型。
                      Container: 用于存储和访问队列元素的底层容器的类型。
                      Compare: 比较关系,默认是数值上的小于关系,比如 1<2, 6<7,此时队列中元素由队头到队尾由大到小排列,采用默认compare 时此参数可以省去。当需要采用其他标准进行比较时需要额外定义这一比较方式。当满足比较关系"<"时,返回 true,否则返回false。

      参考代码如下所示:

#include<queue>
#include<iostream>
#define STACK_SIZE 100
using namespace std;

int main()
{
    priority_queue <int> q;
    q.push(93);
    q.push(5);
    q.push(2);
    q.push(33);
    q.push(52);
    q.push(12);

    cout<<"元素个数为:"<<q.size()<<endl;
    while(!q.empty())
    {
        cout<<q.top()<<endl;   //取队首元素
        q.pop();  //出队列要先判断是否为空
    }
    return 0;
}

另一个参考代码如下:

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

class cmp{
public:
    bool operator() (const int a,const int b){
        return a>b;
    }
};

int main()
{
    priority_queue<int,vector<int>,cmp>que1;
    priority_queue< int,vector<int> >que2;
    int a[]= {1,3,4,2,5,0,6};
    for(int i=0; i<7; i++){
        que1.push(a[i]);
        que2.push(a[i]);
    }
    cout<<"que1:";
    while(!que1.empty()){
        cout<<que1.top()<<" ";
        que1.pop();
    }
    cout<<endl<<"que2:";
    while(!que2.empty()){
        cout<<que2.top()<<" ";
        que2.pop();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值