c++ 中谓词的感想

最近在使用STL 中sort算法的时候, sort默认使用的是<运算符,但是我们需要排序的时候并不一定是 sort默认的< 方法,或则我们使用的元素类型并没有定义<运算符,这个时候就需要我们重载sort默认的行为.

1
2
3
4
5
6
7
template<typename _RAIter>
void
sort(_RAIter, _RAIter); //默认 < 的排序

template<typename _RAIter, typename _Compare>
void
sort(_RAIter, _RAIter, _Compare); //带谓词重载的sort方法
谓词是一个可调用的表达式,其返回一个可用作条件的值,标准库使用的谓词包含两种方式: 一元谓词(unarry predicate) 就是接受一个参数的函数表达式,二元谓词(binary predicate) 就是接受两个参数的函数表达式 在sort的重载版本中用谓词代替默认的< ## 函数作谓词
1
2
3
4
5
6
7
8
9
10
11


bool cmp(int a, int b)
{

return a>b ;
}


std::sort( a.begin(), a.end().cmp) ;

函数对象做谓词

函数对象做谓词是调用类函数重载() 的方法

1
2
3
4
5
6
7
8
9
10
11
12
13

struct cmp
{
public:
cmp()
{}
operator() (int lhs, int rhs)
{
return lhs>rhs;
}
};
std::sort ( a.begin(), a.end(), cmp()) ;

lambda表达式做谓词

待更