C++之priority_queue

前言


之前从没用过优先队列,刷算法题目的时候才开始了解的,所以做个总结。什么情况下使用呢?比如当你需要获取到最大最小值元素,而又不想用最大最小堆的原生实现,STL提供给你更加简单的库,就是priority_queue,其时间复杂度也只有o(nlogn)。

说明

根据元素的优先级被读取,这个优先级取决于你设置的排序函数,如果你没设置,缺省的排序法则则是利用operator<形成降序排列,也就是从大到小排列的大顶堆,第一个自然就是最大的元素。还有如果你没设置保存数据的容器Container的话,默认用的是vector。

namespace std{

template <class T,

    class Container = vector<T>,

    class Compare = less<typename Container:: value_type  >>

    class priority_queue ;

}

priority_queue提供了三个基本函数,分别是:

top()

push()

pop()

注意,pop并不会返回元素,top才会返回堆顶的元素。

STL提供了仿函数greater<>,less<>,简化了自己再定义排序函数的过程。如果你想使用自己定义的结构,而不想使用基本数据类型,也是ok的,不过你需要在你自定义的类中重载运算符,比如:

class Student{

int id;

char name[20];

bool gender;

bool operator < (Student &a) const{

return id > a.id;   

}

};


priority_queue<int, vector<int>, less<int>> maxHeap;//存储小的值,值越大,优先级越高

priority_queue<int,vector<int>, greater<int>> minHeap;//存储大的值,值越小,优先级越高

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容