在使用c++的sort函数时,其函数原型为:
①两个参数的形式
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
②三个参数的形式
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
sort的前两个参数first和last是起始地址和中止地址
如:sort(a,a+n) 表示对a[0] a[1] a[2] ... a[n-1] 排序
我们尝尝希望对结构体类型数据排序。此时怎样设计结构体可以方便的使用第一种方式呢?
必须重载<、>运算符。
有代码有真相。
#include<bits/stdc++.h>//包含了目前c++所包含的所有头文件!!!!
using namespace std;
struct Node
{
int x,y;
bool operator < (Node cmp) const {
if (x != cmp.x) return x < cmp.x;
return y < cmp.y;
}
bool operator > (Node cmp) const {
if (x != cmp.x) return x > cmp.x;
return y > cmp.y;
}
};
Node p[1001];
int n;
void print()
{
for(int i=0;i<n;i++)
{
cout<<p[i].x<<" "<<p[i].y<<"\n";
}
}
int main()
{
scanf("%d",&n);
for (int i = 0;i <n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
cout<<"********升序排序********\n";
sort(p,p+n);//默认按照重载的小于号排序 ,即默认 less<Node>
print();
cout<<"********降序排序********\n";
sort(p,p+n,greater<Node>());//默认按照重载的大于号排序
print();
return 0;
}
/*
5
1 5
3 4
5 1
4 3
2 1
*/