C++ sort函数中利用lambda进行自定义排序规则
一维vector<>排序
在c++中,由于sort()
函数默认提供的是由小到大的排序方式,因此有时候我们需要自定义排序规则来实现由大到小的排序。
#include <bits/stdc++.h>
using namespace std;
void printvec(vector<int>& vec){
for(int i = 0; i < vec.size(); i++){
cout << vec[i] << " ";
}
}
int main(){
int num[] = {1, 9, 3, 8, 5, 7, 12};
vector<int> vec(num, num+(sizeof(num)/sizeof(num[0])));
//使用sort函数进行排序,默认为升序
sort(vec.begin(), vec.end());
printvec(vec);
return 0;
}
程序的输出结果为
1 3 5 7 8 9 12
现在我们引入Lambda()
匿名函数来实现自定义排序规则
#include <bits/stdc++.h>
using namespace std;
void printvec(vector<int>& vec){
for(int i = 0; i < vec.size(); i++){
cout << vec[i] << " ";
}
}
int main(){
int num[] = {1, 9, 3, 8, 5, 7, 12};
vector<int> vec(num, num+(sizeof(num)/sizeof(num[0])));
//使用sort函数进行排序,默认为升序
sort(vec.begin(), vec.end(), [](int a, int b){return a > b;});
printvec(vec);
return 0;
}
程序执行的结果为
12 9 8 7 5 3 1
分析上述代码,最重要的就是下面这句
sort(vec.begin(), vec.end(), [](int a, int b){return a > b;});
这里,我们就通过定义一个lambda匿名函数来实现了从大到小的排序方式。
二维vector中利用某一维数据来进行排序
对于二维vector,直接使用sort()
函数并不能对其进行排序,此时就需要我们借助Lambda()
函数来自定义排序规则
#include <bits/stdc++.h>
using namespace std;
void printvec(vector<vector<int>>& vec){
for(int i = 0; i < vec.size(); i++){
for(int j = 0; j < vec[0].size(); j++){
cout << vec[i][j] << " ";
}
}
}
int main(){
vector<vector<int>> vec{{1, 9, 3},{8, 5, 7}, {12, 13, 14}};
printvec(vec);
sort(vec.begin(),vec.end());
//sort(vec.begin(),vec.end(),[](vector<int> a, vector<int> b){return a[1] > b[1];});
cout << endl;
printvec(vec);
return 0;
}
1 9 3 8 5 7 12 13 14
1 9 3 8 5 7 12 13 14
此处按照每行的第2个元素按照从大到小进行排序
#include <bits/stdc++.h>
using namespace std;
void printvec(vector<vector<int>>& vec){
for(int i = 0; i < vec.size(); i++){
for(int j = 0; j < vec[0].size(); j++){
cout << vec[i][j] << " ";
}
}
}
int main(){
vector<vector<int>> vec{{1, 9, 3},{8, 5, 7}, {12, 13, 14}};
printvec(vec);
//sort(vec.begin(),vec.end());
sort(vec.begin(),vec.end(),[](vector<int> a, vector<int> b){return a[1] > b[1];});
cout << endl;
printvec(vec);
return 0;
}
1 9 3 8 5 7 12 13 14
12 13 14 1 9 3 8 5 7
这次即为从小到大进行排序
#include <bits/stdc++.h>
using namespace std;
void printvec(vector<vector<int>>& vec){
for(int i = 0; i < vec.size(); i++){
for(int j = 0; j < vec[0].size(); j++){
cout << vec[i][j] << " ";
}
}
}
int main(){
vector<vector<int>> vec{{1, 9, 3},{8, 5, 7}, {12, 13, 14}};
printvec(vec);
//sort(vec.begin(),vec.end());
sort(vec.begin(),vec.end(),[](vector<int> a, vector<int> b){return a[1] < b[1];});
cout << endl;
printvec(vec);
return 0;
}
1 9 3 8 5 7 12 13 14
8 5 7 1 9 3 12 13 14