C++ 按列对二维向量进行排序

Posted

技术标签:

【中文标题】C++ 按列对二维向量进行排序【英文标题】:C++ sort 2d vector by column 【发布时间】:2013-04-19 13:05:08 【问题描述】:

谁能告诉我在不使用 boost 的情况下在 C++ 中按列对二维向量进行排序的最佳方法。我进行了一些搜索,但找不到好的答案。

谢谢

【问题讨论】:

大概你有一个“向量的向量”。您的列是哪个向量,内部的还是外部的?它有很大的不同。还有你的排序标准是什么? 它是一个 3x3 向量,我将一个 1x3 向量推到外部向量上 3 次。它们是整数向量,所以我只是尝试按第二列降序排序。 【参考方案1】:

要回答这个问题,我必须做出假设,这意味着您本可以向我们提供更多信息。

假设 1:您所说的“二维向量”是向量的向量,例如vector<vector<int>>

假设 2a:内部向量是行,这意味着,您希望通过例如对外部向量进行排序。其内部向量的第二个元素。在这种情况下,std::sort 开始发挥作用,它有一个将比较器作为其第三个参数的重载。您唯一需要做的就是编写一个比较器(即函数、函数对象、lambda 等),它接受两个向量并通过它们的第 N 个元素比较它们。应该不会太难。

假设 2b:内部向量是 ,即您希望对内部向量之一进行排序并将重新排序也应用于其他行。这有点复杂,例如您可以制作另一个索引 0 到 N 的向量,并使用比较器对其进行排序,给定两个索引 ij 通过实际比较 column[i]column[j] 来比较它们。对该向量进行排序后,您可以相应地重新排序所有列。

【讨论】:

2a 适用于我。谢谢,我试试 是的。我只是使用了比较器函数 bool myfunction (vector i,vector j) return (i[2]【参考方案2】:

STL 中的 sort() 函数可以为您完成。您只需要编写一个函数来比较向量中的两种情况。

http://www.cplusplus.com/reference/algorithm/sort/

之后,这取决于您需要的排序类型,您可以逐列排序,然后是第一行。

【讨论】:

我不确定是否关注你,你能给我们你的向量声明的代码,以及你何时添加数据?

以上是关于C++ 按列对二维向量进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在C#中按列对二维数组进行排序

如何按列对二维数组(锯齿状)进行排序[重复]

使用 std::sort 对具有特定标准的二维向量进行排序

如何按列对多维数组进行排序?

Matlab:如何使用另一个向量按其中一个列对结构进行排序

按列对python数组/recarray进行排序