二维vector数组排序问题

参考:使用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);

除了普通的vector数组,pair也经常在vector中使用,相关的内容如下:pair及pair在vector中的使用

涉及到pair的排序问题参考:vector中pair的排序方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值