c++ sort 二维数组排序_二维数组升序排列
2023-06-13 09:13:01 时间
大家好,又见面了,我是你们的朋友全栈君。
以往遇到行排列问题(按每行的字典序排序)的时候,总是使用结构体来进行排序,但是如何使用二维数组来达到同样的效果呢?
实验内容:利用二维数组进行“三级排序”
测试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;
}
没想到,两次尝试都以失败告终。分析原因,应该是数组名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;
}
虽然过程有些麻烦,但是总算得到了预期的结果。
测试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.cn/169863.html原文链接:https://javaforall.cn
相关文章
- C++面向对象程序设计_面向对象程序设计的基本机制是
- C++数据结构——队列「建议收藏」
- c++截取字符串[通俗易懂]
- c++语言截取字符串,详解C++ string常用截取字符串方法
- C++数组初始化[通俗易懂]
- C++二维数组sort排序问题
- C++基础入门丨5. 数组——一维数组和二维数组
- C++构造函数的作用_c++什么是构造函数
- c++ char数组初始化_二维字符串数组初始化
- C++学习:从基础到QT实现
- C u002F C++ 中的多维数组
- c++复合类型(使用new来分配内存/创建动态数组、delete释放内存)
- C++字符串加密_c++字符串连接函数
- 再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本
- C++ 数组
- c++的链表-C++实现简单链表
- C/C++ 反汇编:多维数组与指针
- C/C++ 实现外部D3D屏幕绘制
- 【Android 逆向】Android 中常用的 so 动态库 ( /system/lib/libc.so 动态库 | libc++.so 动态库 | libstdc++.so 动态库 )
- 开心档之C++ 数组
- C++ map,STL map详解
- C++求数组中的最大值和最小值(带源码)
- C++ peek函数用法详解
- 深入分析C++中几个最不常用的关键字
- 深入C++函数映射的使用详解
- 浅析C++的特殊工具与技术
- 深入解析C++中的指针数组与指向指针的指针
- C++中函数的默认参数详细解析
- C++实现数组的排序/插入重新排序/以及逆置操作详解
- C++实现将一个字符串中的字符替换成另一个字符串的方法