数据结构·优先队列
优先队列
优先队列就是堆的在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();//返回队尾元素
选择一种好记的,手感打起来好的记下来就行了。