首页 > 解决方案 > 使用 std::sort 对二维 c 数组进行排序

问题描述

我似乎无法使用 std::sort 对二维 c 数组进行排序。但是,我可以对一维数组进行排序。这是在我被交给 c++ 程序中的 ac 数组并希望在不将其复制到 std::array 的情况下进行排序的情况。也许有一些方法可以将它变成一个 std::array 而不复制它?这对我来说听起来很可疑,因为任何 std::array 都会在它不拥有的内存上调用析构函数。

排序一维 c 样式数组工作得很好:

int len = 5;
auto one_dim_less = [](int a, int b){
  return a < b;
};
int one_dim[] = {4, 0, 3, 1, 2};
std::sort(one_dim, one_dim + len, one_dim_less);

尝试按第二个数字对二维 c 样式数组进行排序不会编译:

int len = 5;
auto two_dim_less = [](int a[2], int b[2]){
  return a[1] < b[1];
};
int two_dim[][2] = {{1,8}, {2,4}, {3,10}, {4,40}, {5,1}};
std::sort(two_dim, two_dim + len, two_dim_less);

标签: c++arrayssortingstl

解决方案


std::sort() 要求用于排序的对象为MoveAssginable

数组不是 MoveAssginable(也不是可分配的)。

尝试使用结构数组或std::pairs 代替。


推荐阅读