奖学金
sort函数 的参数
传地址才能修改 fisrt =第一个数据地址, end:最后一个数据的后一个地址
sort函数的模板有三个参数:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
(1)第一个参数first:是要排序的数组的起始地址。
(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)
(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。
//重载小于号
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N =310;
struct person
{
int id,sum,a,b,c;//学号,总分,语文,数学,英语
//重载表达式
//如果定义了小于。
} q[N];
bool cmp(person &a,person &b){
if(a.sum!=b.sum)return a.sum>b.sum;
if(a.a!=b.a)return a.a>b.a;
return a.id<b.id;//id返回小的
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
q[i]={i,a+b+c,a,b,c};
}
sort(q+1,q+n+1,cmp);
for(int i=1;i<=5;i++)
{
cout<<q[i].id<<' '<<q[i].sum<<endl;
}
return 0;
}
c++的重载运算符号
通常情况下,重载关系运算符应该:
- 定义顺序关系,令其与相关联的容器中对关键字要求一致
- 如果类同时有含有== 运算符的话,则定义一种关系令其保持一致,特别是,如果连个对象是!=的话,那么一个对象应该<另一个
重载运算符程序
//重载小于号
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N =310;
struct person
{
int id,sum,a,b,c;//学号,总分,语文,数学,英语
//重载表达式
//如果定义了小于。
bool operator < (const person &t)const//常成员
{
if(sum!=t.sum) return sum>t.sum;//大为真
if(a!=t.a)return a>t.a;
return id<t.id;
}
} q[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
q[i]={i,a+b+c,a,b,c};
}
sort(q+1,q+n+1);
for(int i=1;i<=5;i++)
{
cout<<q[i].id<<' '<<q[i].sum<<endl;
}
return 0;
}