C++标准模板库(STL)之priority_queue

priority_queue又称优先队列,底层由堆来实现

头文件声明

#include
using namespace std;

1.定义

priority_queue<typename> name;

2.访问

q.top()//访问队首,无queue的front()和back()

3.其他用法

q.push(x)//将x入队
q.pop()//令队首元素出队
q.empty()//检验是否为空
q.size()//元素个数

4.元素优先级的设置
默认为大顶堆,以下两种写法等价

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

小顶堆定义:

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

结构体的优先级设置范例:

struct fruit{
     
    string name;
    int price;
};

将堆设置为水果贵的优先级高:

struct fruit
{
     
    string name;
    string price;
    friend bool operator < (fruit a,fruit b){
     
        return a.price < b.price;//与sort中的cmp有差别,return <返回的是大顶堆
    }
};

//定义
priority_queue<fruit> q;

另一种写法:(定义结构体cmp,去掉friend,将<改为())

struct cmp
{
     
    bool operator () (fruit a,fruit b){
     
        return a.price < b.price;
    }
};

//定义
priority_queue<fruit,vector<fruit>,cmp> q;

如果结构体内数据过于庞大,可使用引用提高效率

friend bool operator < (const fruit &a,const fruit &b){
     
        return a.price < b.price;
}

bool operator () (const fruit &a,const fruit &b){
     
        return a.price < b.price;
}

你可能感兴趣的:(基础)