Concepto de predicado
concepto:
Un functor que devuelve un tipo bool se llama predicado
Si operator () acepta un parámetro, se llama predicado unario
Si operator () acepta dos parámetros, se llama predicado binario
Predicado unario
Ejemplo de código:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//仿函数 返回值类型是bool数据类型,称为谓词
//一元谓词
class GreaterFive
{
public:
bool operator()(int val)
{
return val > 5;
}
};
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//查找容器中 有没有大于5的数字
//GreaterFive()匿名函数对象
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
if (it == v.end())
{
cout << "未找到" << endl;
}
else
{
cout << "找到了大于5的数字为:" << *it << endl;
}
}
int main()
{
test01();
system("pause");
return 0;
}
Resumen: el parámetro tiene solo un predicado, llamado predicado unario
Ejemplo de código de predicado binario:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//二元谓词
class MyCompare
{
public:
bool operator()(int val1, int val2)
{
return val1 > val2;
}
};
void test01()
{
vector<int>v;
v.push_back(10);
v.push_back(40);
v.push_back(20);
v.push_back(30);
v.push_back(50);
sort(v.begin(), v.end());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//使用函数对象,改变算法策略,变为排序规则为从大到小
sort(v.begin(), v.end(), MyCompare());
cout << "-----------------------------" << endl;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
Resumen: un predicado con solo dos parámetros se denomina predicado binario