当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 关于优先队列的重载问题

关于优先队列的重载问题

2018年03月24日  | 移动技术网IT编程  | 我要评论

2009年3月思想汇报,南京到杭州汽车票价,宝应县

先上个例题:

描述

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

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网