我需要用元组对 vector 进行排序
[ (a_11, ..., a_1n), ... , (a_m1, ..., a_mn) ]
基于属性列表及其比较运算符<或>。 例如:首先使用 > 运算符按 a_2 排序,然后使用 < 运算符按 a_57 排序。
问题:我正在寻找一种数据结构来有效地执行此操作,假设排序发生的频率远高于 vector 的更新。
我目前的想法是通过为每个属性添加类似于链表的指针来存储每个属性的排序顺序:
例如,这个 vector :
0: (1, 7, 4)
1: (2, 5, 6)
2: (3, 4, 5)
会得到数据结构
0: (1 next:1 prev:-, 7 next:- prev:1, 4 next:2 prev:-)
1: (2 next:2 prev:1, 5 next:0 prev:2, 6 next:- prev:2)
2: (3 next:- prev:2, 4 next:1 prev:-, 5 next:1 prev:0)
编辑:
- 在任何给定时间我只需要一个排序顺序。在收到用户要求不同排序顺序的请求后,我需要尽快重新计算。
- 渐进的想法非常好,但我需要估计我需要多少时间,如果我知道应该如何完成,这会容易得多。
- 完成后,我需要随机访问 100 个元素的组,即前 100 个、第二个 100 个或元素 5100-5199。
最佳答案
我会为此使用 boost::MultiIndex。 ——德雷舍姆
关于c++ - 按属性对特征向量进行多排序的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247881/