Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于属性的多分类特征向量的数据结构_C++_Sorting_Multidimensional Array - Fatal编程技术网

C++ 基于属性的多分类特征向量的数据结构

C++ 基于属性的多分类特征向量的数据结构,c++,sorting,multidimensional-array,C++,Sorting,Multidimensional Array,我需要用元组对向量进行排序 [ (a_11,…,a_1n), ... , (a_m1,…,a_mn) ] 基于属性列表及其比较运算符。 例如:首先使用带>运算符的_2和带

我需要用元组对向量进行排序

[ (a_11,…,a_1n), ... , (a_m1,…,a_mn) ]

基于属性列表及其比较运算符<或>。 例如:首先使用带>运算符的_2和带<运算符的_57进行排序

问题:我正在寻找一种数据结构来有效地实现这一点,前提是排序比向量更新更频繁


我目前的想法是通过为每个属性添加类似于链表的指针来存储每个属性的排序顺序:

例如,此向量:

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来实现这一点drescherjm

排序元组需要什么接口?随机访问迭代器/查找?前向迭代器?整个序列作为向量?最大元素还是最小元素?我将从定义这个接口开始,然后开始考虑如何最容易地实现这个接口。稍后,在分析之后,我会考虑添加HACK来加快速度,例如通过创建和缓存各种排序顺序的索引。同时需要多个排序顺序吗?每次排序都存储索引可以让事情变得更简单。我会使用boost::MultiIndex来实现这一点。@MarcoA。你能补充更多的信息吗,我不明白。@drescherjm是的,这是一个很好的解决方案。如果您将此作为答案发布,我将接受。@AmiTavory它解决了我的问题,因此它可以与其他人相关,并且评论可以随时消失。我不知道他为什么不把这篇文章作为答案发表。我之所以不把它作为答案发表,有两个原因。在重新阅读问题后,我不确定这是否是解决您问题的最佳解决方案(不确定第二级和后续级别排序将如何动态工作),而且作为一个经常查看答案的人,我通常希望答案有一个解释,以回答如何使用boost::MultiIndex的问题。因为我没有时间讲我是如何谢绝的。。