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

时间:2016-10-14 15:35:58

标签: c++ arrays sorting

我有这样的阵列:

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::sort来排序my_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]*'

我怎样才能克服它?

1 个答案:

答案 0 :(得分:4)

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

io_service

但是既然你不能将数组分配给另一个数组,那么你的代码无论如何都不会编译。

您可以使用std::array

来避免这种情况
struct sort_left {
    bool operator()(const long (&left)[2], const long (&right)[2]) {
        return left[0] < right[0];
    }
};

额外的好处是array<array<long, 2>, N> arr{}; sort(arr.begin(), arr.end()); operator<会自动定义array定义它的value_type