0

我正在尝试对多维向量进行排序,如果我使用此代码,我会遇到一些问题,我的所有 int 来自 vec[ ][ ][ ]有什么方法可以根据最后一个维度(vec[ ][ ][0] 到 vec[ ][ ][5])订购我的向量 vec?

int main(){
    vector<vector<vector<int> > > vec (148995,vector<vector<int> >(7,vector <int>(6,0))); 
    order();
    order2();
}
bool comparison_function(const std::vector<std::vector<int> >& v1,
                     const std::vector<std::vector<int> >& v2) {

    return v1[5][0] > v2[5][0];
}

void order(){
     std::sort(vec.begin(), vec.end(),comparison_function);
}
bool comparison_function2(const std::vector<std::vector<int> >& v1,
                     const std::vector<std::vector<int> >& v2) {

    return v1[5][2] > v2[5][2];
}

void order2(){
     std::sort(vec.begin(), vec.end(),comparison_function2);
}

它现在的工作方式是,如果我调用 order() 然后 order2(),order() 的所有排序都将丢失,所有内容都由 order2() 排序。

最终,我希望有 6 个排序函数,它们可以使用 vec[ ][ ][x] 的第三个括号分别对向量维度进行排序

感谢您的任何帮助。

4

1 回答 1

0

您不能使用两个不同的比较函数对同一个向量进行排序。第二类忘记了第一类。

您应该只使用一次对 std sort 的调用,但应使用组合比较函数(如字典顺序)。这是二维向量的示例,可为您提供思路:

bool comparison_function(const std::vector<std::vector<int> >& v1,
                 const std::vector<std::vector<int> >& v2) {

    if (v1[5][0] != v2[5][0]) return v1[5][0] > v2[5][0];
    else                      return v1[5][1] > v2[5][1];
}
于 2013-07-17T22:38:00.397 回答