如何std::对三维向量进行排序

how to std::sort a 3 dimensional vector

本文关键字:向量 排序 三维 std 如何      更新时间:2023-10-16

我有一个向量声明如下:

vector<vector<vector<int> > > myVector (148995,vector<vector<int> >(7,vector <int>(6,0)));

我希望能够使用std::sort对其进行排序。

我想用Myvector[x][y][z]中y=5的值对y的所有值进行排序

我希望能够一次对一个z进行排序(z值可以从0到5),我曾尝试将其排序为一个独立的2d向量,并且只有Myvector[x][y],但在这样做的时候我总是会遇到编译错误。

我在另一个stackoverflow问题上发现了这段代码,它适用于2d矢量,但我有限的编程技能不允许我将其转换为3d矢量:

std::sort(myVector.begin(), myVector.end(), [](const std::vector< int >& a, const std::vector< int >& b){ return a[1] > b[1]; } );

谢谢你,Kaven

编辑

myVector[x][y][z]
Myvector[x] = {0,1,2,3,...,200 000}
myvector[0][y][0] = {44,30,21,15,1,600,25} 
myvector[1][y][0] = [25,24,10,7,1,700,30}
myvector[0][y][2] = {34,20,11,6,1,400,25} 
myvector[1][y][2] = [33,24,10,7,1,300,40}

如果我对所有x的myvector[x][y][z]按y=5的值进行排序,并对z=0(z可以从0变为5)的所有"y"值进行排序

如果我使用我想要的排序,并在z=0时使用它我要

myvector[1][y][0] = {44,30,21,15,1,600,25} 
myvector[0][y][0] = [25,24,10,7,1,700,30}
myvector[0][y][2] = {34,20,11,6,1,400,25} 
myvector[1][y][2] = [33,24,10,7,1,300,40}

您应该使用std::sort和一个用于排序的函数。如果我理解正确,你想根据二维或三维进行排序。

bool comparison_function(const std::vector<std::vector<int> >& v1, 
                         const std::vector<std::vector<int> >& v2) {
  // calculate some comparison_result
  return comparison_result
}

使用此函数可以调用std::sort:

std::sort(myVector.begin(), myVector.end(), comparison_function);

如果比较比较比较复杂,那么应该使用函数而不是comparison_function来注入状态。

我不确定我是否正确理解这个问题,但如果你只想对每个矩阵的整数元素m[y][z]上的矩阵向量进行排序,那么我认为你需要以下代码:

#include <vector>
#include <algorithm>
using namespace std;
using Row      = vector<int>;
using Matrix   = vector<Row>;
using Matrices = vector<Matrix>;
/// Sort a vector of matrices on element M[y][z] of each of the matrices.
/// terminology: y and z as in original question
void sort_on( Matrices &matrices, int y, int z)
{
    sort( 
        matrices.begin(), matrices.end(), 
        [y,z](const Matrix &lhs, const Matrix &rhs)
        {
            return lhs[y][z] < rhs[y][z];
        });  
}
int main()
{
    Matrices myVector( 100000, Matrix( 7, Row(6,0)));
    
    sort_on( myVector, 5, 0); // sort on M[5][0]
    sort_on( myVector, 5, 5); // sort on M[5][5]
}