《C++STL基础及应用》
#include <iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<string>
#include<iterator>
using namespace std;
//利用二元函数是学生成绩升序排列
/*函数对象是重载了operator()的类的一个实例,operator()是函数调用运算符
标准C++库根据operator()参数个数为0个,1个,2个加以划分,主要有以下5种类型
发生器:一种没有参数且返回一个任意类型值的函数对象,例如随机数发生器
一元函数:一种只有一个任意类型的参数,且返回一个可能不同类型值的函数对象
二元函数:一种有两个任意类型的参数,且返回一个任意类型值的函数对象
一元判定函数:返回bool型值的一元函数
二元判定函数:返回bool型值的二元函数*/
/*STL二元函数基类是一个模板类,原型如下
*template<class Arg1,class Arg2,class Result>
*struct binary_function{
* typedef Arg1 first_argument_type;
* typedef Arg2 second_argument_type;
* typedef Result result_type;
* }
* */
class Student{
public:
string name;
int grade;
public:
Student(string name ,int grade)
{
this->name=name;
this->grade=grade;
}
bool operator<(const Student s)
{
return grade<s.grade;
}
};
ostream& operator<<(ostream& os,const Student &s)
{
os<<s.name<<"\t"<<s.grade<<"\n";
return os;
}
//由于是Student的比较,所以不能在Student内部重载成员函数,才重新建立了binary_sort类
//二元函数重载 用binary_function
template<class _inPara1,class _inPara2>
class binary_sort:public binary_function<_inPara1,_inPara2,bool>
{
public:
//(_inPara1 in1,_inPara2 in2)用于传入二元函数的2个参数
//()内用于初始化类
bool operator()(_inPara1 in1,_inPara2 in2)
{
return in1<in2;
}
};
int main()
{
Student s1("zhangsan",60);
Student s2("lisi",80);
Student s3("wangwu",70);
Student s4("zhaoliu",90);
vector<Student> v;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
sort(v.begin(),v.end(),binary_sort<Student,Student>());
copy(v.begin(),v.end(),ostream_iterator<Student>(cout, ""));
}
来源:CSDN
作者:ycl010203
链接:https://blog.csdn.net/qq_32140289/article/details/103832602