容器篇_list_自定义类型排序


list_自定义类型排序

#include <iostream>
#include <list>
using namespace std;
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>

class student
{
public:
	student(string num, string name, string University, int TotalGrade) :
		num(num), name(name), University(University), TotalGrade(TotalGrade)
	{}
	friend ostream& operator<< (ostream& out, student stu);
	bool operator<(student& stu) 
	{
		return TotalGrade < stu.TotalGrade;
	}
public:
	string num;
	string name;
	string University;
	int TotalGrade;
};
ostream& operator<< (ostream& out, student stu)
{
	out << stu.num << "\t" << stu.name << "\t"
		<< stu.University << "\t" << stu.TotalGrade << endl;
	return out;
}
//函数对象
template <class _Arg1, class _Arg2, class _Result = bool >
class Compare
{
public:
	_Result operator()(_Arg1& v1, _Arg2& v2) 
	{
		return v1 < v2;		//v1.operator<(v2)
	}
};
//普通函数
template <typename _Arg1, typename _Arg2, typename _Result = bool >
_Result MyCompare(_Arg1& v1, _Arg2& v2)
{
	return v1 < v2;
}

int main()
{
	list<student> List;
	student s1("101", "ZhouQi", "QingHua", 670);
	student s2("102", "WangWu", "Peking", 695);
	student s3("103", "SunEr", "FuDan", 664);
	student s4("104", "GaoLiu", "ZheDa", 656);
	student s5("105", "LongYi", "LanDa", 634);
	List.push_back(s1);
	List.push_back(s4);
	List.push_back(s3);
	List.push_back(s5);
	List.push_back(s2);
	cout << "-------------Before Sort-------------" << endl;
	for (list<student>::iterator it = List.begin(); it != List.end(); it++)
		cout << *it;

	//调用list的第二个排序函数!实现自定义类型的排序!
	//List.sort(Compare<student, student>());		//函数对象实现排序
	List.sort(MyCompare<student, student>);			//普通函数实现排序

	cout << "------------After Sort--------------" << endl;
	for (list<student>::iterator it = List.begin(); it != List.end(); it++)
		cout << *it;
	return 0;
}
***

版权声明:本文为TianYanRen111原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。