所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。
因此,这里需要明确两点:
1 仿函数不是函数,它是个类;
2 仿函数重载了()运算符,使得你可以像调用函数那样调用类。
仿函数可以作为排序准则,比如用于自定义map、set的排序规则
#include<iostream>
#include<string>
#include<set>
using namespace std;
class Functor
{
public:
bool operator()(const string &a,const string &b)
{
return a.size()<b.size() || (b.size()>=a.size() && a<b);
}
};
int main()
{
string str[]={"Machel","Bob","Lisa","Green","Mac"};
set<string,Functor> s(str,str+5);
for(auto iter=s.begin();iter!=s.end();iter++)
cout<<(*iter)<<endl;
return 0;
}
仿函数是类,所以还可以使用类中的其他变量
#include<iostream>
#include<string>
using namespace std;
class Functor
{
public:
Functor()
{
c=",";
}
string operator()(string a,string b)
{
return a+c+b;
}
private:
string c;
};
int main()
{
Functor test;
string a="123";
string b="132";
cout<<test(a,b)<<endl;
return 0;
}