std ::只排序多维向量的一个维度

时间:2013-07-17 22:31:31

标签: c++ sorting stdvector

我正在尝试对多维向量进行排序,并且在此过程中遇到了一些问题 如果我使用这个代码我有vec [] [] []的所有我的int由vec [] [5] [0]命令 有什么方法可以根据最后一个维度(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]

的第三个括号分别对矢量维度进行排序

谢谢你的帮助。

1 个答案:

答案 0 :(得分: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];
}