priority_queue的常见用法

priority_queue的常见用法

priority_queue是什么?

  • 优先队列
  • 底层实现用堆来实现
  • 每次队首的优先级最大

priority_queue的定义

引入头文件

# include <queue>
using namespace std;

定义使用

priority_queue<typename> name;

容器内元素的访问

只能通过top()函数来访问队首的元素

priority_queue<int> q;
q.push(4);
q.push(3);
q.push(2);
cout<<q.top()<<endl;//4

priority_queue常用函数解析

push()

使得元素x入队,时间复杂度为o(logN)。

top()

获取队首的元素,时间复杂度为o(1)

pop()

pop()令队首出队,时间复杂度为o(logN)

empty()

检测队列是否为空,返回true,返回false

size()

返回队列中的元素数量

priority_queue队列优先级的设置

基本数据类型优先级的设置

对于基础类型,一般是数字大的优先级高,对于字符,就是字典序越大,优先级越高。

priority_queue<int> q;
priority_queue<int,vector<int>,less<int>>;

两种定义方式等价

  • vector是承载堆的容器
  • less是比较类,less表示数字大优先级大,greater表示数字大,优先级小

结构体优先级设置

重载小于号

例子

struct fruite{
    string name;
    string price;
};

价格高优先级高

设置友元函数,重载小于号<

struct fruite{
    string name;
    string price;
    friend bool operator <(fruite a,fruite b){
        return fruite.price<fruite.price;
    }
};

注意
只能重载小于号
如果"重载>"

 friend bool operator <(fruite a,fruite b){
        return fruite.price>fruite.price;
  }
创建比较结构体
struct fruite{
    string name;
    string price;
};

struct cmp{
    bool operator() (fruite a,fruite b){
        return a.price>b.price;
    }
};

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

priority_queue的用途以及注意点

  • 解决贪心问题
  • 注意在使用top()之前要判空使用empty()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值