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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm 注释多行代码[通俗易懂]

    pycharm 注释多行代码[通俗易懂]pycharm注释多行代码:选中要注释的代码块,按ctrl+/

    2022年8月28日
  • vb教程编程实例详解pdf_vb程序设计教程答案刘炳文

    vb教程编程实例详解pdf_vb程序设计教程答案刘炳文实验8-1编写如图2.8.1所示的应用程度。若单击“建立文件”按钮,则分别用Print#和和Write#语句将三个同学的学号、姓名和成绩写入Score.dat和Score1.dat;若单击“读取文件”按钮,则用lineInput语句按行将两个(当前目录)文件中的数据显示在相应的文本框。其中:学号和姓名是字符串类型,成绩是整型。解题,画2个按钮,2个文本框(2个文本框的MultiLin…

    2022年10月6日
  • oracle sysdate毫秒,Oracle sysdate常用「建议收藏」

    oracle sysdate毫秒,Oracle sysdate常用「建议收藏」SELECT*FROM(SELECT*FROMcalenderDetailAORDERBYa.calenderdesc)WHERErownum<3;//计算时间大于当前时间的最近2条记录取当前小时,以及相隔一小时v_begin_date:=to_date(to_char(sysdate,‘yyyy-mm-ddhh24‘),‘yyyy-mm-ddhh24‘);…

    2022年10月24日
  • dos2unix命令将dos文件转换为unix格式

    dos2unix命令将dos文件转换为unix格式使用git的时候碰到git将unix换行符转换为windows换行符的问题,需要使用dos2unix命令将文件转换为unix格式。dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MACtoUNIXtextfileformatconverter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D0A。而Unix下的文本文件是以\n作为断行

    2022年5月31日
  • squirrel校园二手交易平台

    squirrel校园二手交易平台squirrel校园二手交易平台(适合寻找SSM项目练手的你。)项目起源:  期末的课程设计,三人一组,我和两个舍友,一时起兴,决定做一个校园二手交易平台,一开始兴致与激情满满,可是后期时间上的冲突,让我们三个人对于这个项目有点累。  这个项目刚定题两天,BezosLee由于通过了360的网上在线笔试,收到了360公司的免费培训邀请,要去北京的360总部进行培训一周,值得庆…

    2022年6月15日
  • 搞定Android开发环境部署——非常详细的Android开发环境搭建教程[通俗易懂]

    搞定Android开发环境部署——非常详细的Android开发环境搭建教程[通俗易懂]引言在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭建,文章写的尽量详细,希望对准备进入Android开发的朋友有帮助。 Android开发环境搭建分为以下四步:第一步、安装JDK;第二步、安装Eclipse;第三步、下载并

    2022年7月23日

发表回复

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

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