📄笔记📄

来自

@刘蕴泽 的blog

但实际上是何老师写的

//注意sort类似快排,O(nlogn),要稳定可以手写或者stable_sort 
/*
方法一:lambda表达式
方法二:重载<运算符 
方法三:实现cmp()函数 
版本低的不支持lambda表达式,在线演示下https://www.jyshare.com/compile/12/ 
输出
name =王,mathgrade = 30, chinesegrade = 50
name =钱,mathgrade = 20, chinesegrade = 40
name =孙,mathgrade = 50, chinesegrade = 30
name =赵,mathgrade = 10, chinesegrade = 20
name =李,mathgrade = 40, chinesegrade = 10 
*/

//方法一:lambda表达式 
//#include <iostream>
//#include <algorithm>
//using namespace std;
//struct Student{
//	string name;
//	int MathGrade;//数学成绩 
//	int ChineseGrade; //语文成绩 
//};
//int main(){
//	
//	Student students[5];
//	students[0]={"赵",10,20};
//	students[1]={"钱",20,40};
//	students[2]={"孙",50,30};
//	students[3]={"李",40,10};
//	students[4]={"王",30,50};
//	//语文成绩大的学生排在前面,结构体中的变量chineseGrade
//	sort(students, students+5, [](Student a, Student b){return a.ChineseGrade >= b.ChineseGrade;});
//	for(int i=0;i<5;i++)
//		cout << "name =" << students[i].name 
//		<<",mathgrade = "<< students[i].MathGrade 
//		<<", chinesegrade = "<<students[i].ChineseGrade<<endl; 
//	return 0;
//}

//方法二:重载<运算符。最重要的方法 
#include <iostream>
#include <algorithm>
using namespace std;
struct Student{
	string name;
	int MathGrade;//数学成绩 
	int ChineseGrade; //语文成绩
	bool operator <(const Student& tmp) const {//注意两个const必须写,Student&的&可以没有 
		return ChineseGrade>=tmp.ChineseGrade;
	} 
};
int main(){
	
	Student students[5];
	students[0]={"赵",10,20};
	students[1]={"钱",20,40};
	students[2]={"孙",50,30};
	students[3]={"李",40,10};
	students[4]={"王",30,50};
	//语文成绩大的学生排在前面,结构体中的变量chineseGrade
	sort(students, students+5);//sort本质是用了小于号 
	for(int i=0;i<5;i++)
		cout << "name =" << students[i].name 
		<<",mathgrade = "<< students[i].MathGrade 
		<<", chinesegrade = "<<students[i].ChineseGrade<<endl; 
	return 0;
}

//方法三:实现cmp()函数
//#include <iostream>
//#include <algorithm>
//using namespace std;
//struct Student{
//	string name;
//	int MathGrade;//数学成绩 
//	int ChineseGrade; //语文成绩 
//};
//bool cmp(Student a, Student b){
//	return a.ChineseGrade>=b.ChineseGrade;
//}
//int main(){
//	
//	Student students[5];
//	students[0]={"赵",10,20};
//	students[1]={"钱",20,40};
//	students[2]={"孙",50,30};
//	students[3]={"李",40,10};
//	students[4]={"王",30,50};
//	//语文成绩大的学生排在前面,结构体中的变量chineseGrade
//	sort(students, students+5, cmp); 
//	for(int i=0;i<5;i++)
//		cout << "name =" << students[i].name 
//		<<",mathgrade = "<< students[i].MathGrade 
//		<<", chinesegrade = "<<students[i].ChineseGrade<<endl; 
//	return 0;
//}

//第k名成绩示例,sort原始<是升序排序,小的在前。重载operator后理解成<返回true则让当前元素排在前面 
//#include <iostream>
//#include <algorithm>
//using namespace std;
//const int maxn=110;
//struct Student{
//	int id;
//	float score;
////	bool operator <(const Student s2)const{
//////		return score<s2.score;//		cout<<stu[n-k+1].id<<" "<<stu[n-k+1].score;
////		return score>s2.score;
////	}
//}stu[maxn]; 
//bool cmp(Student s1,Student s2){
//	return s1.score>s2.score;
//}
//int main(){
//	int n,k;
//	cin>>n>>k;
//	for(int i=1;i<=n;i++){
//		cin>>stu[i].id>>stu[i].score;
//	}
//	sort(stu+1,stu+n+1,cmp);
////	sort(stu+1,stu+n+1);
////	for(int i=1;i<=n;i++){
////		cout<<stu[i].id<<" "<<stu[i].score<<endl;
////	}
//	cout<<stu[k].id<<" "<<stu[k].score;
//	return 0;
//}