我有一个 vector 声明如下:
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 ),我试图将它排序为一个独立的二维 vector 并且只有 Myvector[x][y] 但我这样做时总是会出现编译错误。
我在另一个适用于 2d vector 的 stackoverflow 问题上找到了这段代码,但我有限的编程技能不允许我将它转换为 3d vector :
std::sort(myVector.begin(), myVector.end(), [](const std::vector< int >& a, const std::vector< int >& b){ return a[1] > b[1]; } );
谢谢你 凯文
编辑
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] 进行排序,并对所有 z = 0 的“y”值进行排序(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}
最佳答案
您应该使用 std::sort 和一个用于排序的函数。如果我对你的理解正确的话,你想根据 2 维或 3 维进行排序。
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 来注入(inject)状态。
关于c++ - 如何 std::sort 一个 3 维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458278/