关于优先队列的重载问题
程序员文章站
2022-05-28 23:02:09
先上个例题: 描述 使用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逻辑写法和平时相反,原因请见注释!!
上一篇: PS用时间轴简单制作好玩的动作效果