给定一个行主序表,类型为 std::vector<std::vector<T>>
(其中 T
是一种不可比较的类型,例如 int
或 std::string
),我想按照特定列对表进行排序,同时保留行内容(即行只能作为一个整体移动,而不能移动其单个单元格)。
例如,给定以下表格:
2 8 1 4
3 7 6 7
3 3 4 9
8 6 3 4
7 1 5 7
按照第三列(索引为2)排序,所期望的结果应该是:
2 8 1 4
8 6 3 4
3 3 4 9
7 1 5 7
3 7 6 7
如何使用STL实现这个功能?
我能想到一种解决方法,即将应该排序的列复制到一个关联容器中(例如 std::unordered_map<T, std::size_t>
,其中键是单元格值,值是行索引),然后按键(使用std::sort()
)对映射进行排序,提取结果行索引的顺序,并将其用于重新排序原始表中的行。
但是,当将其编写为实际代码时,此解决方案似乎不够优雅且过于冗长。
有哪些可能的“好”解决方案来实现这个功能?
注意:给定表类型为 std::vector<std::vector<T>>
,不能更改/修改它。