我有这样的数组:
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());
但是我有一个错误:
参数类型不匹配:不兼容的指针类型“long **”和“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());
额外的好处是 operator<
如果 array
则自动定义的 value_type
定义它。
关于c++ - 如何通过 std::sort 对数组的数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047011/