【问题标题】:How to sort array of arrays by std::sort?如何通过std :: sort对数组进行排序?
【发布时间】:2016-10-14 23:52:17
【问题描述】:

我有这样的数组:

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]*'.

我该如何克服它?

【问题讨论】:

标签: c++ arrays sorting


【解决方案1】:

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

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());

额外的好处是,如果arrayvalue_type 定义了operator&lt;,则会自动定义它。

【讨论】:

  • 我不知道 std::array 用作 value_typestd::array 可以排序。整洁的! coliru.stacked-crooked.com/a/a232eca55a5fa6cb
  • 错误:'N'的值在常量表达式数组中不可用, N> arr;
  • 是的,在 C++ 中不能有可变大小的数组。如果您将其用作 gcc 扩展,请使用 array&lt;long, 2&gt; arr[n],然后使用 sort(arr, arr+n);
猜你喜欢
  • 2018-11-20
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2021-10-28
  • 2016-09-11
  • 2013-07-01
相关资源
最近更新 更多