C++排序函数—— sort()

文章目录

sort()

理论知识:sort()函数位于<algorithm> 头文件中,使用前需要include。
该函数使用快速排序(Quick Sort)算法实现,可以对 STL 【容器】中的元素进行排序。

主要以如下两种方式调用。

  1. sort(_RandomAccessIterator __first, _RandomAccessIterator __last) 简记为sort(first, last)
    功能:对线性结构[first, last) 区域内的元素做默认的升序排序。
    排序条件:线性结构(如数组),支持*运算(表明first, last应是某种地址形式),支持<运算(一般结构体不支持单纯的 < 运算)。
    应用时通常用xx.begin()和xx.end()代替first和last,所以在定义数据结构时,将其定义为vector更容易操作。
    比较规则:默认比较规则是__iter_less_iter(),如下。
struct _Iter_less_iter
  {
    
    
    template<typename _Iterator1, typename _Iterator2>
      _GLIBCXX14_CONSTEXPR
      bool
      operator()(_Iterator1 __it1, _Iterator2 __it2) const
      {
    
     return *__it1 < *__it2; }
  };

    且用vector时,该算法或许能处理高维的排序,如:(但还没弄清具体原理)。

int main() {
    
    
    vector<vector<int>> b (3, vector<int>(2, 0));
    b[0][1] = b[1][0] = b[1][1] = b[2][0] = 1;
    for (int i = 0; i < 3; i++) {
    
    
        cout << b[i][0] << "\t" << b[i][1] << endl;
    }
    sort(b.begin(), b.end());
    cout << endl;
    for (int i = 0; i < 3; i++) {
    
    
        cout << b[i][0] << "\t" << b[i][1] << endl;
    }
}
输出
0       1
1       1
1       0

0       1
1       0
1       1
  1. sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) 简记为sort(first, last, comp)
    此种方法可以自定义比较函数comp,比较函数需要满足:
    (1)接受两个参数,表示待比较的元素。
    (2)返回一个bool类型的值,表示比较结果。
    且如果comp(a, b)返回值为true,则a应该排在b之前;否则,b应该排在a之前。
    简单定义一个降序比较函数:
bool cmp(int a, int b) {
    
    
    return a > b; // 降序排列
}
甚至可以
sort(c.begin(), c.end(), [](int a, int b){
    
    return a > b;});

先简单介绍到这里,日后有应用或是发现其他遗漏再补充。

猜你喜欢

转载自blog.csdn.net/2201_75691823/article/details/129854502