从键盘输入 4 个学生的数据( 包括姓名、年龄和成绩),并存放在文件 sf1 上。从该文件读出这些数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct student{
string name;
int age;
int grades;
}stu;
bool cmp(stu s1,stu s2){
if(s1.grades!=s2.grades)
return s1.grades>s2.grades;
else if(s1.name!=s2.name)
return s1.name>s2.name;
else if(s1.age!=s2.age)
return s1.age>s2.age;
}
int main(){
stu s1;
vector<student> s2;
cout<<"请输入四个学生的姓名,年龄,成绩,以00 00 00结束"<<endl;
ofstream out("sf1.txt");
while(cin>>s1.name>>s1.age>>s1.grades)
{
if(s1.name=="00")
break;
out<<s1.name<<" "<<s1.age<<" "<<s1.grades<<endl;
}
ifstream in("sf1.txt");
while(!in.eof()){
in>>s1.name>>s1.age>>s1.grades;
if(in.fail())
break;
s2.push_back(s1);
}
sort(s2.begin(),s2.end(),cmp);
vector<stu>::iterator i;
for(i=s2.begin();i!=s2.end();i++)
cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grades<<endl;
cout<<"成绩次高者信息:"<<endl;
i=s2.begin()+1;
cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grades<<endl;
return 0;
}
其中algorithm中的sort函数,前两个参数为排序范围,第三个参数为比较方式,传递的为函数地址,大于的话为从大到小,小于的话为从小到大。