欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于优先队列的重载问题

程序员文章站 2023-04-03 14:38:37
先上个例题: 描述 使用STL中的优先队列,将n个点按照横坐标从小到大顺序排序,如果横坐标相同,按照纵坐标从小到大排序。 输入 第一行为正整数n,接下来有n行,每行一个点,包含横坐标和纵坐标,均为整数。 第一行为正整数n,接下来有n行,每行一个点,包含横坐标和纵坐标,均为整数。 输出 每组输出排序后 ......

先上个例题:

描述

使用STL中的优先队列,将n个点按照横坐标从小到大顺序排序,如果横坐标相同,按照纵坐标从小到大排序。

输入

第一行为正整数n,接下来有n行,每行一个点,包含横坐标和纵坐标,均为整数。

输出

每组输出排序后的所有点,每行一个点。

样例输入

4
1 2
3 3
1 1
3 2

样例输出

x=1 y=1
x=1 y=2
x=3 y=2
x=3 y=3


#include<iostream>
#include<algorithm>
#include<queue>
using namespace std; 
struct node
{
    int x,y;
    friend bool operator<(node a,node b)      //重载运算符< 
    {
        if(a.x>b.x)  //如果a大于b的横坐标成立,则node a优先级高
        return true;
        else if(a.x==b.x)
        {
            if(a.y>b.y)
            return true;
        }
        return false;
    }
}a,p;
int main()
{
    priority_queue<node>qu;
    int n;
    cin>>n;
    while(n--)
    {
        cin>>a.x>>a.y;
        qu.push(a);
    }
    while(!qu.empty())
    {
        p=qu.top();             //取队列头的元素
        cout<<"x="<<p.x<<" "<<"y="<<p.y<<endl;
        qu.pop();
    }
    return 0;
}

① 优先队列默认是从大到小排序,所以重载<运算符,即从小到大排序。

格式:friend bool operator<(node a,node b)

② 在重载过程中,里面的bool逻辑写法和平时相反,原因请见注释!!