【问题标题】:How to sort multidimensional array in C/C++如何在 C/C++ 中对多维数组进行排序
【发布时间】:2015-06-14 11:27:09
【问题描述】:

在多次尝试使用排序后没有成功,这里是我的实际代码:

#include <algorithm>
#define N   5


    int a[N] = { 3, 6, 2, 4, 1 }; 
    int b[N] = { 6, 3, 1, 2, 9 };
    int c[N][3];

    for ( size_t i = 0; i < N; i++ )
    {
        c[i][0] = a[i]; c[i][1] = b[i]; c[i][2] = i;
    }

    for ( size_t i = 0; i < N; i++ ) printf( "%d,%d, %d\n", c[i][0], c[i][1], c[i][2] ); 

实际输出为:

3,6,0
6,3,1
2,1,2
4,2,3
1,9,4

我需要用第一个键排序,输出应该是这样的:

1,9,4
2,1,2
3,6,0
4,2,3
6,3,1

我尝试了一些绝望的sort(c, c + N);。

【问题讨论】:

  • 向我们展示您是如何尝试对数组进行排序的,并解释为什么您没有看到预期的结果。
  • 您的代码中没有任何内容可以排序。有你的问题。
  • 为qsort编写比较函数,然后在C语言中使用qsort。
  • 我试过 sort(c, c + N);我要编辑我的问题
  • @BLUEPIXY 有什么例子吗?!

标签: c++ c sorting for-loop


【解决方案1】:

c-array 不可赋值,因此不满足std::sort 的要求。

按照建议,在 C++11 中,您可以改用 std::array:

std::array<int, 3> c[5] = {
    {3, 6, 0},
    {6, 3, 1},
    {2, 1, 2},
    {4, 2, 3},
    {1, 9, 4}
};
std::sort(std::begin(c), std::end(c));

Live Demo

【讨论】:

  • 你可以使用std::vector,或者创建你自己的类数组。
  • @user4406273 或使用std::tr1::array 或boost::array。
【解决方案2】:

使用 qsort 版本

#include <cstdio>
#include <cstdlib>

#define N   5

using namespace std;

int cmp(const void  *a, const void *b){
    int *x = (int*)a;
    int *y = (int*)b;
    return (*x > *y) - (*x < *y);
}

int main(){
    int a[N] = { 3, 6, 2, 4, 1 }; 
    int b[N] = { 6, 3, 1, 2, 9 };
    int c[N][3];

    for ( size_t i = 0; i < N; i++ )
    {
        c[i][0] = a[i]; c[i][1] = b[i]; c[i][2] = i;
    }
    qsort(c, N, sizeof(*c), cmp);
    for ( size_t i = 0; i < N; i++ ) printf( "%d,%d, %d\n", c[i][0], c[i][1], c[i][2] ); 
}

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2015-06-28
    • 2019-05-17
    相关资源
    最近更新 更多