greater() 和less()函数经常使用在sort()中用来对容器进行升序或者降序排序,或者用在push_heap()和pop_heap()中用来构建最小堆(greater)或者最大堆(less).
二者包含在头文件functional中

原型如下:

//包含在头文件<functional>中

    // TEMPLATE STRUCT greater  
emplate<class _Ty>  
struct greater  
    : public binary_function<_Ty, _Ty, bool>  
{   // functor for operator>  
bool operator()(const _Ty& _Left, const _Ty& _Right) const  
    {   // apply operator> to operands  
    return (_Left > _Right);  
    }  
};  

    // TEMPLATE STRUCT less  
emplate<class _Ty>  
struct less  
    : public binary_function<_Ty, _Ty, bool>  
{   // functor for operator<  
bool operator()(const _Ty& _Left, const _Ty& _Right) const  
    {   // apply operator< to operands  
    return (_Left < _Right);  
    }  
};  

示例:

// range heap example
#include <iostream>     // std::cout
#include <algorithm>    // std::make_heap, std::pop_heap, std::push_heap, std::sort_heap
#include <vector>       // std::vector

int main () {
  int myints[] = {10,20,30,5,15};
  std::vector<int> v(myints,myints+5);

  std::make_heap (v.begin(),v.end());
  std::cout << "initial max heap   : " << v.front() << '\n';

  std::pop_heap (v.begin(),v.end()); v.pop_back();
  std::cout << "max heap after pop : " << v.front() << '\n';

  v.push_back(99); std::push_heap (v.begin(),v.end());
  std::cout << "max heap after push: " << v.front() << '\n';

  std::sort_heap (v.begin(),v.end());

  std::cout << "final sorted range :";
  for (unsigned i=0; i<v.size(); i++)
    std::cout << ' ' << v[i];

  std::cout << '\n';

  return 0;
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐