stl中优先队列priority_queue的简单使用方法刷题应用

priority_queue  的基本函数
首先 在优先队列中 所有的元素自动排序,采用堆的方式  时间复杂度为O logN;
push() 入队操作
top() 获得队首元素  一般是最大或者最小  优先级最高的
pop() 出队操作  就是弹出队首 
empty() 判断是否空
size() 返回大小


基本操作如上 不再阐述

重点是对优先级的设定

(1) 基本数据类型
priority_queue <int, vector<int>, greater<int> >q;
//表示是最小的优先  注意这个和sort函数中的是反过来的  可以理解为这个是对堆的底层的顺序 greater在地下,则上面的就是小的
priority_queue <int, vector<int>, less<int> >q;

(2)结构体的优先级设置

例如
struct fruit{
    string name;
    int price;
    //接下来定义优先级
    friend bool operater < (fruit a, fruit b) {  //就是对< 进行重载 (就是重新定义小于号的作用  注意只能是小于号)
        return a.price < b.price;                // friend 是友元  ,现在定义的是price大的在上面  注意和sort中的cmp相反
    }
};
//那么现在对优先队列的定义就是
priority_queue <fruit> q;

如果结构体中的数据比较庞大 那可以用使用引用来提高效率

friend bool operater < ( const fruit &a,  const fruit &b) {  //就是对< 进行重载 (就是重新定义小于号的作用  注意只能是小于号)
        return a.price < b.price;                // friend 是友元  ,现在定义的是price大的在上面  注意和sort中的cmp相反
        }

你可能感兴趣的:(队列,算法)