优先队列小结

优先队列priority_queue

头文件#include<queue>;

基本优先队列的形式priority_queue<int>que;

作用:对队列里的元素默认从大到小排列。

复杂一点的优先队列:priority_queue<type, container, functional>que;

type 为数据类型, container 为保存数据的容器,functional 为元素比较方式。
container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.

       STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。

重点:优先队列里比较函数的写法:
 

priority_queue<int, vector<int>, less<int> > q;//等价于默认,从大到小排
//greater<int> 从小到大排

2.自定义优先级:

 struct cmp{
    bool operator ()(const node &a, const node &b)
    {
        return a.value>b.value;// 按照value从小到大排列
    }
};
priority_queue<node, vector<node>, cmp>que;

3.对结构体进行重载操作符:

struct node {  
   int x,y;  
   friend bool operator < (node a, node b)  
   {  
       return a.x>b.x;    //x小的优先级高。  
   }  
};  

 

也可以:

 

struct node{  
int x,y;  
};  
bool operator(const node &a,const node &b)  
{  
return a.x>b.x;  
};  
  
  
priority_queue<node>que;  
    bool operator < (const point &a) const //升序排列 
    {  
        return x<a.x;  
    }  

 

posted @ 2018-04-12 19:40  Nlifea  阅读(118)  评论(0编辑  收藏  举报