我有一个声明如下的向量:
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]但是我这样做总是会出现编译错误。
我在另一个适用于2d矢量的stackoverflow问题上找到了这个代码,但我的有限编程技巧不允许我将其转换为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}
如果我按y = 5的值对所有x的myvector [x] [y] [z]进行排序,并对所有'y'值进行排序,其中z = 0(z可以从0变为5)
如果我要使用我想要的排序并在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}
答案 0 :(得分:2)
您应该使用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);
如果您的比较相当复杂,那么您应该使用仿函数而不是compare_function来注入状态。
答案 1 :(得分:1)
我不确定我是否正确理解了这个问题,但如果您只想在每个矩阵的整数元素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]
}