加深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,所以此时为降序。