C++二维数组sort排序问题

C++二维数组sort排序问题以往遇到行排列问题(按每行的字典序排序)的时候,总是使用结构体来进行排序,但是如何使用二维数组来达到同样的效果呢?实验内容:利用二维数组进行“三级排序”测试1:使用c++内置的普通型二维数组#include<algorithm>#include<iostream>usingnamespacestd;boolcmp(inta[],intb[]){ …

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

以往遇到行排列问题(按每行的字典序排序)的时候,总是使用结构体来进行排序,但是如何使用二维数组来达到同样的效果呢?

实验内容:利用二维数组进行“三级排序”

测试1:使用c++内置的普通型二维数组

#include <algorithm>
#include <iostream>
using namespace std;

bool cmp(int a[], int b[])
{
	if(a[0] != b[0]) return a[0] > b[0];
	if(a[1] != b[1]) return a[1] > b[1];
	if(a[2] != b[2]) return a[2] > b[2];
}

int main()
{
	int a[6][3] = { {1,4,3}, {1,4,7} , {1,3,5} , {2,9,4} , {2,5,8} , {3,9,6} };

	//sort(a, a + 6, cmp);			//编译器直接报错。。 
	sort((int**)a, (int**)(a+6), cmp);
	
	for(int i = 0; i < 6; ++i)
		cout<<a[i][0]<<' '<<a[i][1]<<' '<<a[i][2]<<endl;

	return 0;
}

C++二维数组sort排序问题

没想到,两次尝试都以失败告终。分析原因,应该是数组名a和一维数组名a[0]、a[1]均为const类型指针,排序时无法交换它们而导致错误。//我也不太确定

测试2:动态创建二维数组

这样看起来就可以避免测试1中的种种问题了,代码如下:

#include <algorithm>
#include <iostream>
using namespace std;

bool cmp(int a[],int b[])
{
	if(a[0] != b[0]) return a[0] > b[0];
	if(a[1] != b[1]) return a[1] > b[1];
	if(a[2] != b[2]) return a[2] > b[2];
}

int main()
{
	int a[6] = {1, 1, 1, 2, 2, 3};		//储存re[i][0] 
	int b[6] = {4, 4, 3, 9, 5, 9};		//储存re[i][1] 
	int c[6] = {3, 7, 5, 4, 8, 6};		//储存re[i][2] 
	int i;
	
	int **re = new int*[6];		//动态创建二维数组 
	for (i = 0; i < 6; ++i)
	{
		re[i] = new int[3];
		re[i][0] = a[i];
		re[i][1] = b[i];
		re[i][2] = c[i];
	}
	
	sort(re, re + 6, cmp);		//排序后输出 
	for(i = 0; i < 6; ++i)
		cout << re[i][0] << ' ' << re[i][1] << ' ' << re[i][2] << endl;

	return 0;
}

虽然过程有些麻烦,但是总算得到了预期的结果。

C++二维数组sort排序问题

测试3:利用STL中的vector容器进行排序

即利用vector<vector<int>>容器模拟二维数组进行排序

 

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

bool cmp(vector<int> a, vector<int> b)
{
	if(a[0] != b[0]) return a[0] > b[0];
	if(a[1] != b[1]) return a[1] > b[1];
	if(a[2] != b[2]) return a[2] > b[2];
}

int main()
{
	vector<vector<int>> vec = { {1,4,3}, {1,4,7} , {1,3,5} , {2,9,4} , {2,5,8} , {3,9,6} };
	
	sort(vec.begin(), vec.end(), cmp);

	for(auto p : vec)
		cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<endl;

	return 0;
}

看起来好像STL方便一些~

总结:利用二维数组进行排序还是挺麻烦的,以后还是用结构体吧(逃…

编译器:Devcpp(设置支持c++11)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179826.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ArcGIS二次开发基础教程(10):三维分析

    ArcGIS二次开发基础教程(10):三维分析ArcGIS二次开发基础教程(10):三维分析坡度分析请务必学会使用帮助文档!!!//DEM数据的坡度分析将分析结果添加到地图上//首先获取DEM数据,方法有很多例如从个人地理数据库获取,也可直接获取文件数据,此处采用第二种方法IWorkspaceFactoryworkspaceFactory=newShapefileWorkspaceFactoryClass();//从文件…

    2022年7月23日
    9
  • linux 虚拟网络_macvlan原理

    linux 虚拟网络_macvlan原理      macvlan是Linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一个变多个,同时要求物理网卡打开混杂模式。针对每个mac地址,都可以设置IP地址,本来是一块物理网卡连接到交换机,现在是多块虚拟网卡连接到交换机。macvlan应该很简单。1.环境准备         假设有一块物理…

    2022年8月10日
    8
  • Java指令编译java文件

    Java指令编译java文件Java指令编译java文件1.进入cmd2.编译2.1切换不同JDK编译文件3.运行1.进入cmd如何快速进入/打开cmd–快捷键在源代码目录输入cmd,然后回车2.编译如果出现错误:编码GBK的不可映射字符(0x8D)需要在javac后面加上-encodingUTF-8javac-encodingUTF-8编译的文件.java这时候就会多出.class文件,就是字节码文件了。2.1切换不同JDK编译文件一般JDK配置好了,直接用javac

    2022年6月12日
    35
  • springcloud eureka原理和机制_eureka配置详解

    springcloud eureka原理和机制_eureka配置详解SpringCloudEureka原理分析1简介在微服务架构下,服务端环境通常包含多个服务,同时每个服务也是一个无状态的多实例集群。这些服务和实例一般都是会动态变化的,可能会因为意外的故障或者人为的重启发版等原因,这些服务和实例的信息和数量随时会发生改变。因此微服务环境下需要一个服务注册中心来集中管理集群中各个服务实例的状态,这样服务的调用方就可以动态地从服务注册中心获取到当前可用的服务实例来发起调用。Eureka就是服务发现中心的一种。Eureka一开始是由Netflix开源的用于服

    2022年10月19日
    6
  • idea保存快捷键_idea 快捷键[通俗易懂]

    idea保存快捷键_idea 快捷键[通俗易懂]一、视图切换快捷键ctrl+tab切换的区域列表cmd+e列出最近查看的文件列表shift+cmd+e最近修改文件列表上面两个键在开发过程中非常有用。二、搜索快捷键cmd+f在当前文件中搜索cmd+r在当前文件搜索并替换ctrl+shift+f(r)在项目中进行搜索或替换搜索出来后,要全部替换,按下alt+aalt+F7…

    2022年5月14日
    70
  • 求逆矩阵的几种方法_求逆矩阵有几种方法

    求逆矩阵的几种方法_求逆矩阵有几种方法**1.待定系数法**矩阵A=1,2-1,-3假设所求的逆矩阵为a,bc,d则这里写图片描述从而可以得出方程组a+2c=1b+2d=0-a-3c=0-b-3d=1解得a=3;b=2;c=-1;d=-12.伴随矩阵求逆矩阵伴随矩阵是矩阵元素所对应的代数余子式,所构成的矩阵,转置后得到的新矩阵。我们先求出伴随矩阵A*=-3,-21,1接下来,求出矩阵A的行列式|A|=1*(-3)-(-1)*2=-3+

    2022年8月21日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号