参考:使用vector创建二维动态数组,并使用sort对其进行排序
程序首先构建二维vector数组viA,然后对其进行打印,之后,按照不同的方式对其进行排序。
程序如下:
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
bool cmp(const vector<int> &a, const vector <int> &b) {
return a[1] > b[1];
}
int main()
{
vector<vector<int>> viA(10);
for(int i = 0; i < 10; i++)
for(int j =0; j < 10; j++) {
viA[i].push_back(rand()%100);
}
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
cout<<viA[i][j]<< "\t";
}
cout<<endl;
}
cout<<"排序后的输出:"<<endl;
for(int i = 0; i < 10; i++) {
//sort(viA[i].begin(), viA[i].end());
//sort(viA.rbegin(), viA.rend());
//sort(viA.begin(), viA.end(), [](const vector <int> &a, const vector <int> &b) {return a[1] < b[1];} );
sort(viA.begin(),viA.end(), cmp);
}
for(int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cout<<viA[i][j]<< "\t";
}
cout<<endl;
}
return 0;
}
其中,sort(viA[i].begin(), viA[i].end())执行后,结果如下,每行都按照从小到大的顺序进行了排列。
41 67 34 0 69 24 78 58 62 64
5 45 81 27 61 91 95 42 27 36
91 4 2 53 92 82 21 16 18 95
47 26 71 38 69 12 67 99 35 94
3 11 22 33 73 64 41 11 53 68
47 44 62 57 37 59 23 41 29 78
16 35 90 42 88 6 40 42 64 48
46 5 90 29 70 50 6 1 93 48
29 23 84 54 56 40 66 76 31 8
44 39 26 23 37 38 18 82 29 41
排序后的输出
0 24 34 41 58 62 64 67 69 78
5 27 27 36 42 45 61 81 91 95
2 4 16 18 21 53 82 91 92 95
12 26 35 38 47 67 69 71 94 99
3 11 11 22 33 41 53 64 68 73
23 29 37 41 44 47 57 59 62 78
6 16 35 40 42 42 48 64 88 90
1 5 6 29 46 48 50 70 90 93
8 23 29 31 40 54 56 66 76 84
18 23 26 29 37 38 39 41 44 82
sort(viA.rbegin(), viA.rend())按照第一列元素的大小进行了排序,且是按照从大到小的顺序进行排序
41 67 34 0 69 24 78 58 62 64
5 45 81 27 61 91 95 42 27 36
91 4 2 53 92 82 21 16 18 95
47 26 71 38 69 12 67 99 35 94
3 11 22 33 73 64 41 11 53 68
47 44 62 57 37 59 23 41 29 78
16 35 90 42 88 6 40 42 64 48
46 5 90 29 70 50 6 1 93 48
29 23 84 54 56 40 66 76 31 8
44 39 26 23 37 38 18 82 29 41
排序后的输出
91 4 2 53 92 82 21 16 18 95
47 44 62 57 37 59 23 41 29 78
47 26 71 38 69 12 67 99 35 94
46 5 90 29 70 50 6 1 93 48
44 39 26 23 37 38 18 82 29 41
41 67 34 0 69 24 78 58 62 64
29 23 84 54 56 40 66 76 31 8
16 35 90 42 88 6 40 42 64 48
5 45 81 27 61 91 95 42 27 36
3 11 22 33 73 64 41 11 53 68
sort(viA.begin(), viA.end(), [](const vector &a, const vector &b) {return a[1] < b[1];} )按照第二列元素的大小进行了排序,按照从小到大的顺序排列,如果将‘a[1] < b[1]’改成‘a[1] > b[1]’就是按照从大到小的顺序排列,如果将a[1]、b[1]改成a[2]、b[2]就是按照第三列元素的大小进行排序,第三列元素所在行的其他元素随该元素整体搬移到其他行
同样的效果还有下面这种写法:
bool cmp(const vector<int> &a, const vector <int> &b) {
return a[1] < b[1];
}
sort(viA.begin(),viA.end(), cmp);