STL特殊容器之priority_queue

一、概述

priority_queue是一个拥有权值(优先级)观念的queue,除此之外和queue无异。priority_queue内的元素并非依照被推入的次序排序,而是按照元素的权值排列。权值最高者排列在最前面。缺省情况下priority_queue使用max-heap实现的,max-heap是一个以vector表现的完全二叉树。max-heap可以满足priority_queue所需的“按照权值高低自动递减排序”的特性。priority_queue同queue一样也被归为容器配接器。priority_queue不允许遍历操作,所以也不提供迭代器。使用priority_queue之前须先含入头文件<queue>。

二、priority_queue的核心接口

在<queue>中,class priority_queue定义如下:

namespace std{
    template <class T,
              class Container = vector<T>,
              class Compare = less<typename Container::value_type>>
    class priority_queue;
}

template第一个参数是元素型别;第二个参数定义了内部来存放元素的容器,缺省则是vector;第三个参数定义出排序准则,缺省情况下使用operator<作为比较标准。

  • 初始化方式与底层实现容器的初始化方式相同。
  • size()返回queue的数据元素个数。
  • empty()判断queue是否为空,空返回true。
  • push()会将一个元素推入queue中。
  • top()会返回priority_queue的下一个元素。
  • pop()会删除priority_queue一个元素。

三、程序示例

priority_queue的使用示例

//example of priority_queue,use default container max-heap
#include <iostream>
#include <queue>
using namespace std;

int main()
{
    priority_queue<float> q;

    q.push(66.6);
    q.push(22.2);
    q.push(44.4);

    cout << q.top() << ' ';
    q.pop();
    cout << q.top() << '\n';
    q.pop();

    q.push(11.1);
    q.push(55.5);
    q.push(33.3);

    q.pop();

    while (!q.empty()){
        cout << q.top() << ' ';
        q.pop();
    }
    cout << endl;
    return 0;
}

输出结果:
这里写图片描述


以vector作为priority_queue的底层容器实例:

//use list to construct queue
#include<queue>
#include<iostream>
#include<functional>
using namespace std;

int main()
{
    //参照上面priority_queue的类型介绍,排序准则为递增排序
    priority_queue<float, std::vector<float>, greater<float>> q;

    //priority_queue<float> q;
    q.push(66.6);
    q.push(22.2);
    q.push(44.4);

    cout << q.top() << ' ';
    q.pop();
    cout << q.top() << '\n';
    q.pop();

    q.push(11.1);
    q.push(55.5);
    q.push(33.3);

    q.pop();

    while (!q.empty()){
        cout << q.top() << ' ';
        q.pop();
    }
    cout << endl;
    return 0;
}

输出结果:
这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值