欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

加深sort第三个参数的理解

程序员文章站 2022-03-11 09:30:46
...

在实际生活中经常需要用到sort的第三个参数,但是这个参数到底是怎么影响排序的顺序呢?现在去搜索的话搜索的也只有一个结论,所以我决定自己研究下看一看,开始吧。

#include <iostream>
#include <vector>
#include <pair>

int main() {
    vector<pair<int, int>> pairs{{1, 2}, {3, 5}, {2, 3}, {4, 4}, {1, 1};
    sort(pairs.begin(), pairs.end(), [&](pair<int, int> a, pair<int, int> b) {
        return a.first < b.first;
    });
    for (auto pair : pairs) {
        std::cout << "{" << pair.first << "," << pair.second << "}, " ;
    }
    std::cout << std::endl;
    return 1;
}
//输出为:{1,2}, {1, 1}, {2,3}, {3,5}, {4,4}, 

比较左右a与b的first,身在右边的b的first如果大于身在左边的a的first,那么b就在a的右边,反之就按照原来的顺序。

也就是说最后的结果,要使得左边元素的first < 右边元素的first,也就是升序。

那么我们调换a和b的位置:

#include <iostream>
#include <vector>
#include <pair>

int main() {
    vector<pair<int, int>> pairs{{1, 2}, {3, 5}, {2, 3}, {4, 4}, {1, 1}};
    sort(pairs.begin(), pairs.end(), [&](pair<int, int> b, pair<int, int> a) {
        return a.first < b.first;
    });
    for (auto pair : pairs) {
        std::cout << "{" << pair.first << "," << pair.second << "}, " ;
    }
    std::cout << std::endl;
    return 1;
}
//{4,4}, {3,5}, {2,3}, {1,2}, {1,1}, 

此时b代表左边的元素,a代表右边的元素,就相当于左边元素的first > 右边元素的first,所以此时为降序。

相关标签: sort