c++ - 如何通过 std::sort 对数组的数组进行排序?

标签 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::sortmy_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/

相关文章:

Java ArrayList 在自定义条件下删除重复项

php - 在php中排序整数值

python - 在python列表中对元组进行排序

C++ 和虚拟析构函数

c++ - 从 lua 4.0.1 升级到 5.1.4 时链接错误

arrays - 将数组从某个位置复制到c中的另一个数组

c++ - 是什么导致数组越界运行时错误?

c++ - 为什么我的 3d 点积在另一个方向上变黑了?

c++ - 将文本字段中的值存储在 .txt 中

arrays - 将Reducer方法的Iterator <Pojo>对象存储到数组