C++ C++;按2列对多维数组排序
我有一个3D数组,其中保存了3列数字数据。 我想按照第一列的升序对这个Nx3矩阵进行排序,然后对于这个列上的值相同的情况,我想按照第二列对它们进行排序 例如: 如果在第1列中有多个min元素,我希望进一步按第二列对它们进行排序,再次按升序排序。 所以看起来是这样的: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++中有没有
[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;
}