优先队列完整参数:
priority_queue<class Type,class Container,class Compare>;
推荐Container:
vector<Type>
默认Compare使用方法:
1.less<Type>
2.greater<Type>
自定义比较函数Compare,可使用两种方法:
方法1,写一个比较结构体struct:
#include<queue>
#include<vector>
#include<iostream>
using namespace std;
struct node
{
int x, y;
node(int x,int y):x(x),y(y){}
};
//比较结构体如下:
struct cmp
{
bool operator()(node a,node b)
{
if(a.x == b.x) return a.y >= b.y;
else return a.x > b.x;
}
};
int main()
{
priority_queue<node,vector<node>,cmp> pq; //带有三个参数的优先队列;
for(int i = 1; i <= 5; i++)
for(int j = 1; j <= 5; j++)
pq.push(node(i,j));
while(!pq.empty())
{
cout<<pq.top().x<<" "<<pq.top().y<<endl;
pq.pop();
}
return 0;
}
方法2,重写'<'操作符:
#include<queue>
#include<iostream>
using namespace std;
struct node
{
int x, y;
node(int x,int y):x(x),y(y){}
};
bool operator< (node a,node b)
{
if(a.x == b.x) return a.y >= b.y;
else return a.x > b.x;
}
int main()
{
priority_queue<node> pq; //只传node,但是node结构体的<运算符已被改变
for(int i = 1; i <= 5; i++)
for(int j = 1; j <= 5; j++)
pq.push(node(i,j));
while(!pq.empty())
{
cout<<pq.top().x<<" "<<pq.top().y<<endl;
pq.pop();
}
system("pause");
return 0;
}
注意:重写的是node结构体的'<'操作符,如果还有其它结构体需要比较的话,需要继续重写操作符'<'!
转自:C++ priority_queue的自定义比较方式_AAMahone的博客-CSDN博客_c++ priority_queue自定义比较函数