先上個例題: 描述 使用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邏輯寫法和平時相反,原因請見註釋!!