有人可以告诉我在不使用boost的情况下按C ++中的列对2d向量进行排序的最佳方法。我做了一些搜索,我找不到一个好的答案。
由于
答案 0 :(得分:2)
要回答这个问题,我必须做出假设,这意味着你可以给我们更多的信息。
假设1:你所谓的“2D矢量”是矢量的矢量,例如一个vector<vector<int>>
。
假设2a:内部向量是行,这意味着,您希望通过例如对外部向量进行排序。内部向量的第二个元素。在这种情况下,std::sort
启动,其中有一个重载,它将比较器作为其第三个参数。你唯一要做的就是写一个比较器(即函数,函数对象,lambda等),它采用两个向量并用它们的第N个元素进行比较。不应该太难。
假设2b:内部向量是列,即您希望对其中一个内部向量进行排序,并将重新排序也应用于其他行。这有点复杂,例如您可以创建另一个索引0到N的向量,并使用比较器对其进行排序,给定两个索引i
和j
通过实际比较column[i]
和column[j]
来比较它们。对该向量进行排序后,可以相应地重新排序所有列。
答案 1 :(得分:1)
STL中的sort()函数可以为您完成。您只需要编写一个函数来比较矢量中的2个案例。
http://www.cplusplus.com/reference/algorithm/sort/
之后,它取决于您需要的排序类型,您可以逐列排序,然后排序第一行。