当前位置:新注册送38元体验金 > 新注册送38元体验金编程 > 关于优先队列的重载问题,优先队列重载问题

关于优先队列的重载问题,优先队列重载问题

文章作者:新注册送38元体验金编程 上传时间:2019-08-22

关于优先队列的重载问题,优先队列重载问题

先上个例题:

描述

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

输入

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

输出

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

新注册送38元体验金,样例输入

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逻辑写法和平时相反,原因请见注释!!

 

先上个例题: 描述 使用STL中的优先队列,将n个点按照横坐标从小到大顺序排序,如果横坐标...

本文由新注册送38元体验金发布于新注册送38元体验金编程,转载请注明出处:关于优先队列的重载问题,优先队列重载问题

关键词: