如何按 std::sort 对数组数组进行排序

How to sort array of arrays by std::sort?

本文关键字:数组 排序 sort 何按 std      更新时间:2023-10-16

我有这样的数组:

long my_array_left[n][2];

我为它编写了比较器函数,它接受两个元素的数组并按数组的第一个元素排序:

struct sort_left {
    bool operator()(const long &left[2], const long &right[2]) {
        return left[0] < right[0];
    }
}

然后我使用库函数std::sortmy_array_left[n][2]进行排序

sort(begin(my_array_left), end(my_array_left), sort_left());

但是我有一个错误: parameter type mismatch: Incompatible pointer types 'long **' and 'long[2]*' .

我该如何克服它?

您的直接问题可以通过使用一个比较器来解决,该比较器实际上接受对数组的引用而不是对指针的引用:

struct sort_left {
    bool operator()(const long (&left)[2], const long (&right)[2]) {
        return left[0] < right[0];
    }
};

但是由于您无法将一个数组分配给另一个数组,因此您的代码无论如何都不会编译。

您可以使用std::array来避免这种情况:

array<array<long, 2>, N> arr{};
sort(arr.begin(), arr.end());

额外的好处是,如果array value_type定义了operator<,则会自动定义它。