STL list中对象排序

        STL list可以对基本数据、字符串直接调用sort()函数默认做升序排列,但是对于降序排列或者对非基本数据类型排序(对象、数组等)需要借助operator()函数实现,这点和Java中的List很相似。
具体调用函数:
list.sort(Cmpare());

其中Cmpare是一个类或结构体,成员函数operator()必须是公共类型的。

我举一个简单的例子(对学生按年龄降序排列)

  

#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <string>
using namespace std;
class Student 
{
private:
    int age;
	string name;
public:
	void setAge(int age);
	void setName(string name);
	int getAge() const; 
    string getName() const;
};

#endif


#include "Student.h"
void Student::setAge(int age)
{
	this->age = age;
}

void Student::setName(string name) 
{
	this->name = name;
}

int Student::getAge() const
{
	return this->age;
}

string Student::getName() const
{
	return this->name;
}



#ifndef _CMPARE_H_
#define _CMPARE_H_
#include "Student.h"
class Cmpare
{
public:
	bool operator()(const Student st1,const Student  st2) const;
};
#endif


#include "Cmpare.h"
bool Cmpare::operator()(const Student st1,const Student  st2) const 
{
	return st1.getAge() > st2.getAge();   
}


#include "stdafx.h"
#include <stdlib.h>
#include <list>
#include <iostream>
#include "Cmpare.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    
	Student stu1;
	stu1.setAge(20);
	stu1.setName("stu1");

	Student stu2;
	stu2.setAge(18);
	stu2.setName("stu2");
    
	Student stu3;
	stu3.setAge(17);
	stu3.setName("stu3");

	Student stu4;
	stu4.setAge(22);
	stu4.setName("stu4");

	list<Student> stuList;
	stuList.push_back(stu1);
	stuList.push_back(stu2);
	stuList.push_back(stu3);
	stuList.push_back(stu4);

   stuList.sort(Cmpare());

   list<Student>::iterator stuIter = stuList.begin();
   for( ; stuIter != stuList.end() ; stuIter ++) 
   {
	   cout<<"name:"<<(*stuIter).getName() <<",age:"<<(*stuIter).getAge()<<endl;
   }
   return 0;
}

运行结果:
    name:stu4,age:22
     name:stu1,age:20
     name:stu2,age:18
     name:stu3,age:17

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值