首页 > 其他 > 详细

priority_queue的常见用法

时间:2019-08-21 11:36:01      阅读:95      评论:0      收藏:0      [点我收藏+]

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()

priority_queue的常见用法

原文:https://www.cnblogs.com/mengxiaoleng/p/11387601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!