C++ sort

sort是C++ STL(Standard template library)提供的排序函数,它可以为普通函数或者容器中指定范围内的元素进行排序。默认为升序排序,排序的区间左闭右开

使用标准库(STL)提供的比较规则

    vector<int> a(n);
    //....
    sort(a.begin(), a.end(), less<int>());//从小到大
    sort(a.begin(), a.end(), greater<int>());//从大到小
    priority_queue<int, vector<int> ,less<int> >q;//从大到小排序,注意优先队列是反的

lessgreater的意思是两个要比较的元素中,第一个元素是否比第二个元素更小(less)或更大(greater)。
lessgreater实际上是模板结构体,即sort的第三个参数可以是类对象。

template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      _GLIBCXX14_CONSTEXPR
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };

template<typename _Tp>
    struct greater : public binary_function<_Tp, _Tp, bool>
    {
      _GLIBCXX14_CONSTEXPR
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x > __y; }
    };

自定义比较规则

自定义比较规则多用函数实现

  const bool mycmp(int a, int b)
{
    return a < b;//升序
}

  sort(a.begin(), a.end(), mycmp);

当然也可以仿照上面的规则使用结构体或类对象作为sort的第三个参数。

sort排序pair

pair有自带的排序规则,其默认对first升序,当first相同时对second升序;
我们可以增加第三个参数来改变排序规则

   vector<pair<int, char>> b(n);
   sort(b.begin(), b.end(), greater<pair<int, char>>());//从大到小

   const bool mycmp(const pair<int, char> a, const pair<int, char> b)
{
    return a.first != b.first ? a.first < b.first : a.second > b.second;
}
    sort(b.begin(), b.end(), mycmp);

用lambda自定义比较规则

    sort(a.begin(), a.end(), [](int x, int y)
      {
          return x < y;
      });

[]里的参数为空,因为除x,y之外不需要额外的参数。

posted @ 2022-12-13 21:35  何太狼  阅读(60)  评论(0编辑  收藏  举报