基于列对二维向量数组进行排序
Posted
技术标签:
【中文标题】基于列对二维向量数组进行排序【英文标题】: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
【问题讨论】:
【参考方案1】:尝试使用std::sort
like
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,
【讨论】:
以上是关于基于列对二维向量数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章