【问题标题】:Sorting 2D Vector Array Based On a Column基于列对二维向量数组进行排序
【发布时间】:2016-04-07 09:00:44
【问题描述】:

我有一个 2d 矢量数组,其中包含:

row id   r   b   main  
   1     0   26   3
   2     1   11   2
   3     1   46   4
   4     2   26   1
   5     3   11   2

我想根据其"main"-column 值对每一行进行排序 更小"main"-column。 较小的值=> 整行应该在顶部。

如果有两行或更多行并且"main"-column 具有相同的值,我想检查"r"-column。 较小的值=> 整行应该在顶部。

排序后是这样的:

row id   r   b   main  
   4     2   26   1
   2     1   11   2
   5     3   11   2
   1     0   26   3
   3     1   46   4

【问题讨论】:

    标签: c++ arrays sorting vector


    【解决方案1】:

    尝试使用std::sortlike

    using int_arr = std::array<int, 4>;
    std::sort(std::begin(arr), std::end(arr), [](const int_arr& a, const int_arr& b){
        return a[3] != b[3] ? a[3] < b[3] : a[1] < b[1];
    });
    

    演示

    #include <iostream>
    #include <array>
    #include <algorithm>
    
    int main() {
        using int_arr = std::array<int, 4>;
        int_arr arr[5] = { 
            {1, 0, 26, 3}, 
            {2, 1, 11, 2}, 
            {3, 1, 46, 4}, 
            {4, 2, 26, 1}, 
            {5, 3, 11, 2}
        };
    
        for(const auto& i_arr : arr) {
            for(const auto& i : i_arr)
                std::cout<< i <<", ";
            std::cout << "\n";
        }
    
        std::cout << "**************\n";
    
        std::sort(std::begin(arr), std::end(arr), [](const int_arr& a, const int_arr& b){
            return a[3] != b[3] ? a[3] < b[3] : a[1] < b[1];
        });
    
        for(const auto& i_arr : arr) {
            for(const auto& i : i_arr)
                std::cout<< i <<", ";
            std::cout << "\n";
        }
    }
    

    输出

    1, 0, 26, 3, 
    2, 1, 11, 2, 
    3, 1, 46, 4, 
    4, 2, 26, 1, 
    5, 3, 11, 2, 
    **************
    4, 2, 26, 1, 
    2, 1, 11, 2, 
    5, 3, 11, 2, 
    1, 0, 26, 3, 
    3, 1, 46, 4,
    

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多