C++学习对二维数组进行排序

Posted songyuc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习对二维数组进行排序相关的知识,希望对你有一定的参考价值。

1 问题描述

今天在学习 CUDA-NMS 算法时,遇到一个小问题,就是希望对一个二维数组进行排序,具体是这样的:

需要对存储目标框的二维数组进行排序,排序的方式是按照目标框的得分score从高往低排序,也就是结果数组的第二维的最后一个元素(dets[i][4]

(1)尝试使用sort()直接进行排序,无法编译通过

刚开始听人说,可以用sort()直接进行排序,不过试了一下好像无法编译通过,示例代码:CPP_sort

#include <algorithm> // for std::sort

const int N = 3;
int arr[N][N] = 
        3, 1, 7,
        4, 1, 9,
        5, 3, 2,
    ;

int main()

    // Initialize the array with some values
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            arr[i][j] = i * N + j;

    // Sort the array using a custom comparator function
    std::sort(arr, arr + N, [](const int a[], const int b[]) 
        return a[N-1] > b[N-1];
    );

    // The array is now sorted in descending order by the last element of the second dimension
    return 0;

我个人感觉这里面比较本质的原因是:二维数组(的一行)无法像一维数组的元素一样,在排序的时候进行swap交换,所以在编译的时候会报错;
我个人觉得比较看起来有关联的一句报错信息如下所示:

报错信息表示:error: invalid array assignment,很可能就是表示无法直接使用dets[i]的方式直接赋值数组的一行;

2 解决方法

代码示例:CPP_qsort_2d_array

Note:
这份代码示例没有用lambda表达式来书写,会使得代码的篇幅较长,之后会计划使用lambda表达式来进行改写。

以上是关于C++学习对二维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

c++排序二维数组编译失败

如何对二维数组的列进行排序?

Vector容器 二维数组sort()排序

在 C++ 中对结构数组进行排序

PHP 数组排序 +php二维数组排序方法

如何按特定单元格快速排序二维数组?