greater< type >()和less< type >()是functional下的两个仿函数,都重载了操作符,它们的源码如下:
greater
/// One of the @link comparison_functors comparison functors@endlink.
template<typename _Tp>
struct greater : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x > __y; }
};
less
/// One of the @link comparison_functors comparison functors@endlink.
template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
};
可见greater是从大到小排,less是从小到大排。
stl中sort(begin, end),lower_bound( begin,end,num)和upper_bound( begin,end,num)默认的是从小到大排,如果要从大到小排,在最后的参数上写上“greater< int >()”或者写自定义比较函数:
bool cmp(const int& a,const int& b){return a > b;}
greater< int>()表示内置类型从大到小排序,比如说原序列是1,2,4,7,15,34,在greater< int>()的表示下,1>2>4>7>15>34,
优先队列priority_queue< type >和上面的不一样,它的默认的取出顺序是从大到小的,相当于less,从小到大就要写成
priority_queue <int,vector<int>,greater<int> > q;