【发布时间】:2017-03-31 19:32:57
【问题描述】:
在this 问题中,我们看到了如何通过每个向量的第一个元素对向量进行排序的很好的解释,以及通过每个向量并按其元素排序的第二个示例。
我知道对于 STL 的高级用户而言,数组不是 C++ 的一等公民,但我喜欢数组(就像 Andrei Alexandrescu)。
所以,让我们考虑一下代码:
typedef int arr2D[3];
arr2D array2D[3] = { { 1, 4, 3 },
{ 9, 2, 5 },
{ 7, 6, 8 } };
std::sort(begin(array2D[2]), end(array2D[2]), greater<>());
这样的结果是,将array2D的最后行按降序排列,如下所示:
1 4 3
9 2 5
8 7 6 <- last row by descending order
但是,我想要的是按降序排列 array2D 的最后 列,如下所示:
1 4 8
9 2 5
7 6 3
^
└--- last column by descending order
使用普通的arrays(不是向量)和std::sort,有人可以帮我吗?
谢谢
【问题讨论】:
-
很遗憾,您不能使用
std::sort对“列”进行排序。您可以将它们提取到单独的数组(或向量)中(因此newArray[0]对应于array2D[0][2]等),对其进行排序,然后将排序后的值写回您的数组中。 -
您必须在排序之前和之后转置矩阵。
-
一些程序员老兄和乔纳斯:我和你们两个想法一样,但是在我阅读你的cmets之前,我认为我错了。现在我确信
std :: sort只能应用于连续的数据结构。
标签: c++ sorting c++11 multidimensional-array