我对单个数组使用 sort()函数,效果很好 我也将它用于多维数组,但这不起作用 这是代码:
#include <iostream>
using namespace std;
int main(){
int a[2][3];
a[0][1]=7;
a[1][0]=1;
a[1][1]=3;
sort(a,a+3);
cout<<a[0][1]<<"\t"<<a[1][0]<<"\t"<<a[1][1];
return 0;
}
我知道我使用单个数组来表示这些值,但这是示例,我希望它在多维数组中。
答案 0 :(得分:1)
使用您的代码只需在多维数组的每一行上使用std::sort
。即
#include <iostream>
using namespace std;
int main(){
int a[2][3];
a[0][0]=1;
a[0][1]=7;
a[0][2]=3;
a[1][0]=6;
a[1][1]=2;
a[1][2]=5;
for(int i = 0; i < 2; i++) {
sort(a[i],a[i]+3);
}
for(int row = 0; row < 2; row++) {
for(int col = 0; col < 2; col++) {
cout << a[row][col] << " ";
}
}
return 0;
}
我启动了多维数组a
的每个元素,因为您声明的a
大小为6(2行,3列)。这将输出1 3 7 2 5 6
,因为它将行从最小到最大排序。如果您想对多维数组进行排序,以便输出读取1 2 3 5 6 7
,那么您需要执行以下操作:
#include <iostream>
using namespace std;
int main(){
int a[2][3];
int b[6];
int count = 0;
a[0][0]=1;
a[0][1]=7;
a[0][2]=3;
a[1][0]=6;
a[1][1]=2;
a[1][2]=5;
for(int row = 0; row < 2; row++) {
for(int col = 0; col < 3; col++) {
b[count] = a[row][col];
count++;
}
}
sort(b, b+6);
count = 0;
for(int row = 0; row < 2; row++) {
for(int col = 0; col < 3; col++) {
a[row][col] = b[count];
count++;
}
}
for(int row = 0; row < 2; row++) {
for(int col = 0; col < 3; col++) {
cout << a[row][col] << " ";
}
}
return 0;
}
第二个例子可能是排序多维数组的最糟糕的方法。如果您在我的代码中发现错误,我无法测试或需要其他帮助,请告诉我。
答案 1 :(得分:0)
由于多维数组是连续的,您还可以尝试:
int main()
{
int a[2][3];
a[0][0]=1;
a[0][1]=7;
a[0][2]=3;
a[1][0]=6;
a[1][1]=2;
a[1][2]=5;
std::sort(&a[0][0], &a[1][3]);
for(int row = 0; row < 2; row++) {
for(int col = 0; col < 3; col++) {
std::cout << a[row][col] << " ";
}
}
}
取决于你想要的。也可以为多维数组编写begin()
和end()
。