您的位置:首页 > 编程语言 > C语言/C++

使用sort 和自定义比较函数对任意成员变量排序

2014-05-28 22:54 603 查看
我在学习C++ STL部分时,一直在思考如何使用最简单的方法实现对任意乱序的学生信息,分别按照姓名、年龄、成绩进行排序,在参考了前人的经验和经过自己的整合,终于找到了十分方便的方法,在这里与大家分享和讨论。

对于STL 中的list、vector、map等均有sort函数大家并不陌生,很容易实现对单个成员变量的排序,但是如何实现对特定的成员变量按照特定的顺序排序呢?

我的样本信息为:

stu1("wang",20,3.54);

stu2("zhang",27,3.24);

stu3("zuo",33,3.76);

stu4("li",24,3.98);

输出结果要求分别按照姓名、年龄、成绩进行升序排序。

VS 2010 调试成功代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class student
{
public:
string name;
int age;
float result;
<span style="white-space:pre">	</span>//此处代码是参考前人的,不是很理解,希望大家指点!
student(string na,int ag,float res):name(na),age(ag),result(res){}
bool operator < (const student &st)const
{
return name < st.name;
}
};
bool less_age(const student& st1, const student & st2)
{
return st1.age < st2.age;
}
bool less_result(const student& st1, const student & st2)
{
return st1.result< st2.result;
}
int main()
{
student stu1("wang",20,3.54);
student stu2("zhang",27,3.24);
student stu3("zuo",33,3.76);
student stu4("li",24,3.98);

vector <student> stu;
stu.push_back(stu1);
stu.push_back(stu2);
stu.push_back(stu3);
stu.push_back(stu4);

cout<<">before sort"<<endl;
for (int i=0;i<stu.size();i++)
cout<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].result<<endl;

cout<<"after sort name"<<endl;
sort(stu.begin(),stu.end());
for (int i=0;i<stu.size();i++)
cout<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].result<<endl;

cout<<"after sort age"<<endl;
sort(stu.begin(),stu.end(),less_age);
for (int i=0;i<stu.size();i++)
cout<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].result<<endl;

cout<<"after sort result"<<endl;
sort(stu.begin(),stu.end(),less_result);
for (int i=0;i<stu.size();i++)
cout<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].result<<endl;

while(1);
}
输出结果如下:

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  2010 sort c++ stl
相关文章推荐