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()
原文地址:https://www.cnblogs.com/mengxiaoleng/p/11387601.html