算法(12)-运算符重载-C++

     应用中对于系统函数,比如sort,默认是从小到大的排序,现在我想让它从大到小的排序,我该怎么做呢?
     或者我有一组对象,学生,有学号、年龄、分数等属性,我一会想按学号排,一会想按年龄排,一会想按分数排,如何做呢?JAVA中叫比较器,C++中叫运算符重载就派上用处了。
     简而言之,利用系统函数自定义排序
   原理上就是先定义两个对象,然后定义返回值。返回值分>,< ,=.哪种语言都是一样的。
首先我要有两个对象,其次我定义了返回值。
比如:两个对象 o1,o2比大小 从大到小排 O1>O2
         1.返回负数时 o1应该排在O2的前面。
         2.返回正数时 o2应该排在O1的前面。
         3.返回0时,谁排前面都可以。

以下是C++实例源码,亲测可行,供大家参考。
 修改点: std::sort(arr, arr + 5, compareId); 写了一个compareId()函数用来排序的。
 

class student
{
public:
	string name;
	int id;
	int age;
};
//从小到大
bool compareId(student& s1, student& s2) 
{
	return s1.id < s2.id;
}
//从小到大
bool compareAge(student& s1, student& s2) {
	return s1.age < s2.age;
}


void Comparator_main()
{
	cout << "Comparator_main******************" << endl;
	int m_num = 5;
	student arr[5] = {
		{ "xiao ming1",7,26 },
		{ "xiao ming2",3,18 },
		{ "xiao ming3",5,50 },
		{ "xiao ming4",4,20 },
		{ "xiao ming5",1,40 }
	};
	cout << "original arr***************************" << endl;
	for (int i = 0; i < m_num; i++)
	{
		cout << "i=" << i << ";name=" << arr[i].name << ";" << ";age=" << arr[i].age << ";id=" << arr[i].id << endl;
	}
	cout << "compareId******************************" << endl;
	std::sort(arr, arr + 5, compareId);
	for (int i = 0; i < m_num; i++)
	{
		cout << "i=" << i << ";name=" << arr[i].name << ";" << ";age=" << arr[i].age << ";id=" << arr[i].id << endl;
	}
	cout << "compareAge******************************" << endl;
    std::sort(arr, arr + 5, compareAge);
	for (int i = 0; i < m_num; i++)
	{
		cout << "i=" << i << ";name=" << arr[i].name << ";" << ";age=" << arr[i].age << ";id=" << arr[i].id << endl;
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值