谓词
返回bool类型的仿函数称为谓词
若果operator()接受一个参数,叫做一元谓词
若果operator()接受的两个参数,叫做二元谓词
#include <iostream>
#include <string>
#include <vector>
#include <deque>
#include <algorithm>
#include <list>
#include <set>
#include <map>
#include <functional>
using namespace std;
class Myfind
{
public:
//重载()括号运算符(仿函数), 一元谓词
bool operator()(int var)
{
return var==5;
}
};
void test1()
{
vector<int> vt;
vt.push_back(10);
vt.push_back(20);
vt.push_back(5);
//使用函数对象来查找元素
//条件查询,在beg和end区间进行查找,若元素值等于5,则返回,否则返回迭代器end();
vector<int>::iterator it = find_if(vt.begin(), vt.end(), Myfind());
if (it != vt.end())
{
cout<<"找到:"<<*it<<endl;
}
else
{
cout<<"没有找到"<<endl;
}
}
class MyCompare
{
public:
//重载()运算符,二元谓词
bool operator()(int var1, int var2)
{
return var1>var2;
}
};
void printVector(const vector<int> &vt)
{
for(vector<int>::const_iterator it=vt.begin(); it!=vt.end(); it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test2()
{
vector<int> vt;
vt.push_back(10);
vt.push_back(20);
vt.push_back(5);
sort(vt.begin(), vt.end());
printVector(vt);
//根据仿函数二元谓词来自定义排序
sort(vt.begin(), vt.end(), MyCompare());
printVector(vt);
}
//使用内建仿函数
void test3()
{
vector<int> vt;
vt.push_back(10);
vt.push_back(20);
vt.push_back(5);
//由于sort源码是less<T>()递增排序, 使用greater递减排序
sort(vt.begin(), vt.end(), greater<int>());
printVector(vt);
}
int main()
{
test3();
}