数据结构·优先队列

优先队列

堆的传送门

优先队列就是堆的在C++中的STL库的版本,这里放上三种声明优先队列的方式

需要导入的头文件为< queue >

默认写法

priority_queue<int> q;
priority_queue<node> q; //node可以定义为自己申明的结构体

默认的队列优先级是从大到小,数据越优先级越高

调用函数写法

priority_queue<int,vector<int>,greater<int> >q; //小根堆
priority_queue<int,vector<int>,less<int> >q; //大根堆
//后面的两个"> >"不能连着写,会被编译器误认为位运算符

这里的greater,less两个类型如果不用万能头的话,需要导入头文件< functional >,第二个vector是动态数组,属于一个容器类型参数,需要导入头文件< vector >

重载小于号,自定义优先级

struct node
{
    int x,y;
    bool operator <(const node &a) const
    {
        return x<a.x;//重载后,这里所定义的优先级与符号相反,表示大的数优先级高
                    //如果是Sort则是优先级与符号符号相同,小的数在前面
    }
    //如果要从小到大输出,要改为return x>a.x;
};
struct node  
{  
    int x, y;  
    friend bool operator < (node a, node b)  
    {  
        return a.x < b.x;//结构体中,x大的优先级高 
    }  
};//这是另外一种重载方式,定义友元运算符
priority_queue<node> q;

操作函数

接下来提供一下优先队列的基本操作函数

q.push();//进队

q.pop();//出队

q.top();//返回队头元素,*不是front*

q.size();//返回队的长度

q.empty();//返回队是否为空,1为空

q.back();//返回队尾元素

选择一种好记的,手感打起来好的记下来就行了。

猜你喜欢

转载自www.cnblogs.com/lightcoder/p/11437170.html