c++ - 按属性对特征向量进行多排序的数据结构

标签 c++ sorting multidimensional-array

我需要用元组对 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/

相关文章:

php多维数组循环优化

javascript - 为什么这个二维数组会出错?

c++ - 从头文件中分解 C++ 源代码

c++ - 从 double 到整数的显式类型转换是否总是检查整数溢出?

c# - 对包含字典的对象列表进行排序

linux - 降序排序非常小的数字

java - 二维数组中的最大和路径+两个值加倍以获得更好的分数

c++ - 将枚举类型从 Lua 传递到 C++ 的最简单方法?

c++ - 输入迭代器是否只能在赋值的右侧符号上取消引用?

scala - 如何在 Scala 中对大写和小写字符串进行排序