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 的向量,并使用比较器对其进行排序,给定两个索引 i
和 j
通过实际比较 column[i]
和 column[j]
来比较它们。对该向量进行排序后,您可以相应地重新排序所有列。
【讨论】:
2a 适用于我。谢谢,我试试 是的。我只是使用了比较器函数 bool myfunction (vectorSTL 中的 sort() 函数可以为您完成。您只需要编写一个函数来比较向量中的两种情况。
http://www.cplusplus.com/reference/algorithm/sort/
之后,这取决于您需要的排序类型,您可以逐列排序,然后是第一行。
【讨论】:
我不确定是否关注你,你能给我们你的向量声明的代码,以及你何时添加数据?以上是关于C++ 按列对二维向量进行排序的主要内容,如果未能解决你的问题,请参考以下文章