1

有人可以告诉我在不使用 boost 的情况下在 C++ 中按列对 2d 向量进行排序的最佳方法。我已经进行了一些搜索,但找不到一个好的答案。

谢谢

4

2 回答 2

2

为了回答这个问题,我必须做出假设,这意味着你可以给我们更多信息。

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

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

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

于 2013-04-19T13:17:50.930 回答
1

STL 中的 sort() 函数可以为您完成。您只需要编写一个函数来比较向量中的 2 个案例。

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

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

于 2013-04-19T13:09:20.110 回答