如何使用std ::按第一列对2D矩阵进行排序
How to use std::sort on a 2d matrix by first columns?
如何应用std ::排序以下数据结构?
static unsigned Data[][3] = {
{A1, b1, c1},
{A2, B2, C2},
...};
应进行订购,以比较第一列:
{A,B,C} < {X,Y,Z} <==> A<X.
此代码是自动生成的,以包含在另一个C 代码库中,并且在一代中,我无法访问" A"的数值,因此我需要在运行时订购它。
我尝试了以下内容:
std::sort(std::begin(Data), std::end(Data), Comp);
与Comp定义为:
const auto Comp = [](const unsigned (&a)[3], const unsigned (&b)[3]) { return (a[0] < b[0]); };
或:
const auto Comp = [](const unsigned a[3], const unsigned b[3]) { return (a[0] < b[0]); };
尽管两个lambdas都适用于std :: range_equal,但编译器(GCC 4.8)不接受此lambda用于std :: stort,请按以下方式报告:
/usr/include/c++/4.8/bits/stl_algo.h:5491:55:
required from ‘void std::sort(_RAIter, _RAIter, _Compare)
[with _RAIter = unsigned int (*)[3]; _Compare =
f(const llvm::MCInst&, const OperandVector&, llvm::SMLoc&)::__lambda1]’
....
/usr/include/c++/4.8/bits/stl_algo.h:2162:11:
error: array must be initialized with a brace-enclosed initializer
__val = _GLIBCXX_MOVE(*__i);
事先感谢您的帮助。
ps:我不想使用
std::vector<std::tuple<unsigned,unsigned,unsigned>>
而不是
unsigned[][3]
都不
std::map<unsigned,std::vector<std::pair<unsigned,unsigned>>>
作为数据结构(后者将避免std :: sort and std :: quare_range)
原始数组不可移动,这是std::sort
的要求:
类型要求
- 注入的RandomIt
的类型必须满足MoveAssignable
和MoveConstructible
的要求。
为了排序,您只需要一个元素的容器 MoveAssignable
即可。像std::array
:
using Inner = std::array<unsigned, 3>;
std::array<Inner, 4> arr = {
{5, 1, 2},
{6, 2, 3},
{2, 5, 10},
{5, 0, 0}
};
std::sort(std::begin(arr), std::end(arr), [](const Inner& a, const Inner& b){
return a[0] < b[0];
});
// now, arr is {2,5,10}, {5,1,2}, {5,0,0}, {6,2,3}
相关文章:
- 根据组件 1、2(和 3)对空间 (2D/3D) 向量进行排序
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 通过 std::sort 对 C 2D 数组进行排序
- 如何在不通过插入排序更改原始矢量的情况下对 2D 矢量进行排序
- 如何搜索和排序 2D 数组
- 气泡排序 2D 数组
- 2d 排序卡算法
- 2D数组排序,空格打乱顺序
- 2D 矢量排序算法
- 对通过引用传递的 2d 向量进行排序
- C 2D数组排序
- 我们如何在 c++ 中使用 std::sort 对 2D 字符串数组进行排序
- 按一行对2D数组进行排序
- 2D 字符串数组气泡排序
- 如何对主对角线上方的 2D 数组中的元素进行排序
- 仅使用 iostream 按字母顺序对 2d 数组进行气泡排序
- 根据某一行对整个 2D 向量进行排序
- C++:对2D数组进行基于1行的排序
- 根据关系的 2D 数组对数组进行排序(更高、更低、无关紧要)
- 在 2D z 排序渲染系统中组合点(粒子)和三角形(精灵)