有两种方法,一是重载Student类中的“<”运算符。二是自己定义一个普通的全局比较函数。
一、重载Student类中的“<”运算符
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
class Student
{
public:
int ID;
string name;
int grade;
Student(int ID,string name,int grade)
{
this->ID = ID; this->name = name; this->grade = grade;
}
bool operator<(const Student &s) const
{
return grade<s.grade;
}
};
int main()
{
Student s1(101,"张三",91); Student s2(102,"李四",85);
Student s3(103,"王五",60); Student s4(104,"赵六",72);
vector<Student> v;
v.push_back(s1); v.push_back(s2);
v.push_back(s3); v.push_back(s4);
sort(v.begin(),v.end());
//也可以使用
//sort(v.begin(),v.end(),less<Student>());
cout<<"升序排序结果:"<<endl;
cout<<"学号\t"<<"姓名\t"<<"成绩"<<endl;
vector<Student>::iterator iter=v.begin();
while(iter!=v.end())
{
cout<<iter->ID<<"\t"<<iter->name<<"\t"<<iter->grade<<endl;;
iter++;
}
cout<<endl;
return 0;
}
输出结果如下所示:
二、使用普通的全局比较函数
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
class Student
{
public:
int ID;
string name;
int grade;
Student(int ID,string name,int grade)
{
this->ID = ID; this->name = name; this->grade = grade;
}
};
//普通的全局比较函数
bool mygreater(Student &s1, Student &s2)
{
return s1.grade<s2.grade;
}
int main()
{
Student s1(101,"张三",91); Student s2(102,"李四",85);
Student s3(103,"王五",60); Student s4(104,"赵六",72);
vector<Student> v;
v.push_back(s1); v.push_back(s2);
v.push_back(s3); v.push_back(s4);
sort(v.begin(),v.end(),mygreater); //更改sort函数,去掉Student类中的bool operator<(const Student &s)
cout<<"升序排序结果:"<<endl;
cout<<"学号\t"<<"姓名\t"<<"成绩"<<endl;
vector<Student>::iterator iter=v.begin();
while(iter!=v.end())
{
cout<<iter->ID<<"\t"<<iter->name<<"\t"<<iter->grade<<endl;;
iter++;
}
cout<<endl;
return 0;
}
输出结果与上图一致。