Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;按2列对多维数组排序_C++_Sorting_Matrix_Multidimensional Array - Fatal编程技术网

C++ C++;按2列对多维数组排序

C++ C++;按2列对多维数组排序,c++,sorting,matrix,multidimensional-array,C++,Sorting,Matrix,Multidimensional Array,我有一个3D数组,其中保存了3列数字数据。 我想按照第一列的升序对这个Nx3矩阵进行排序,然后对于这个列上的值相同的情况,我想按照第二列对它们进行排序 例如: 如果在第1列中有多个min元素,我希望进一步按第二列对它们进行排序,再次按升序排序。 所以看起来是这样的: [1, 2, 3] [1, 3, 1] [2, 4, 2] [3, 5, 6] 等等 由于第1列中存在多个最小元素“1”,因此根据第2列的值对第1列的这些最小值进行排序 我知道在Python的大熊猫中是可能的,但是在C++中有没有

我有一个3D数组,其中保存了3列数字数据。 我想按照第一列的升序对这个Nx3矩阵进行排序,然后对于这个列上的值相同的情况,我想按照第二列对它们进行排序

例如: 如果在第1列中有多个min元素,我希望进一步按第二列对它们进行排序,再次按升序排序。 所以看起来是这样的:

[1, 2, 3]
[1, 3, 1]
[2, 4, 2]
[3, 5, 6]
等等

由于第1列中存在多个最小元素“1”,因此根据第2列的值对第1列的这些最小值进行排序


我知道在Python的大熊猫中是可能的,但是在C++中有没有方便的方法?

< P>我用标准比较器来尝试标准算法<代码> STD::SoTo()/<代码> 具体到您的需要。
()

/*
g++-std=c++17-o prog prog.cpp\
-学究式-墙壁-Wextra-Wconversion\
-g-O0-fsanize=地址,未定义
*/
#包括
#包括
#包括
结构向量3
{
int x,y,z;
};
int
main()
{
自动v=std::向量{{3,5,6},
{2, 4, 2},
{1, 3, 1},
{1, 2, 3}};
康斯特汽车展=
[&]()
{
用于(常数自动和e:v)
{

std::无法编写自定义比较器来满足您的需要。例如,请参见,。这是关于二维数组(其中第一个维度的大小恰好为3)还是我遗漏了什么?
/*
  g++ -std=c++17 -o prog prog.cpp \
      -pedantic -Wall -Wextra -Wconversion \
      -g -O0 -fsanitize=address,undefined
*/

#include <iostream>
#include <vector>
#include <algorithm>

struct Vec3
{
  int x, y, z;
};

int
main()
{
  auto v=std::vector<Vec3>{{3, 5, 6},
                           {2, 4, 2},
                           {1, 3, 1},
                           {1, 2, 3}};
  const auto show=
    [&]()
    {
      for(const auto &e: v)
      {
        std::cout << e.x << ' ' << e.y << ' ' << e.z << '\n';
      }
    };
  show();
  std::sort(begin(v), end(v),
    [&](const auto &lhs, const auto &rhs)
    {
      if(lhs.x<rhs.x) return true;
      if(lhs.x>rhs.x) return false;
      if(lhs.y<rhs.y) return true;
      if(lhs.y>rhs.y) return false;
      return lhs.z<rhs.z;
    });
  std::cout << "~~~~~~~~~~~~~~~~\n";
  show();
  return 0;
}