记录一下,以后不能忘了!!
如果priority_queue插入结构体类型的变量,需要重载<运算符
有两种重载<运算符方式:
1.在结构体内部写重载
举例:
#include<cstdio>
#include<queue>
using namespace std;
struct Node{
int a, b;
bool operator <(const Node &x)const
{
return a < x.a;
}
}node[100];
int main()
{
priority_queue<Node> que;
int N;
scanf("%d",&N);
for(int i=0; i<N; i++)
{
scanf("%d%d",&node[i].a, &node[i].b);
que.push(node[i]);
}
printf("\n");
while(!que.empty())
{
Node u = que.top(); que.pop();
printf("%d %d\n",u.a, u.b);
}
return 0;
}
2.在结构体外部写重载
举例:
#include<cstdio>
#include<queue>
using namespace std;
struct Node{
int a, b;
}node[100];
bool operator <(const Node &x, const Node &y)
{
return x.a < y.a;
}
int main()
{
priority_queue<Node> que;
int N;
scanf("%d",&N);
for(int i=0; i<N; i++)
{
scanf("%d%d",&node[i].a, &node[i].b);
que.push(node[i]);
}
printf("\n");
while(!que.empty())
{
Node u = que.top(); que.pop();
printf("%d %d\n",u.a, u.b);
}
return 0;
}
这样优先队列的优先级就重写好了。重载根据自己要求写就行。
运行图: