具有随机访问的快速,有序的数据结构?

时间:2013-01-05 16:21:23

标签: c++ data-structures

我想在允许这样的结构中添加几个对象:

  1. 插入对象,立即对整个结构进行排序,这样我就有了一个int的降序排列;

  2. 能够更改对象排序的int(我的意思是:说对象编号为2,现在的int为5,所以它重新排序结构);

  3. 快速结构,因为它将每秒完全迭代60次;

  4. 能够按位置直接访问对象;

  5. 只需要从上到下进行迭代:更高的INT来降低INT

  6. 不需要删除,但以后可能会有用。

  7. 关于如何使用该结构的一些迹象会很棒,因为我对C ++标准库知之甚少。

2 个答案:

答案 0 :(得分:6)

您列出的所有操作(按索引查找除外)都可以由标准二进制搜索树支持,以整数值为键。这使您能够按排序顺序迭代元素,并在任何插入过程中保持对象的排序。正如@njr所提到的,您还可以通过从二叉搜索树中删除对象,更改其优先级,然后将它们重新插入二叉搜索树来更新优先级。

要支持按索引进行随机访问,您应该考虑查看 order statistic trees ,这是二进制搜索树上的一个变体,除了所有其他操作支持非常快(O(log n) )通过索引查找元素。也就是说,您可以非常有效地查询排序序列中的第15个元素,或者第17个等。订单统计树不是C ++标准库的一部分,但 this older question 包含可以将您链接到实施的答案。

希望这有帮助!

答案 1 :(得分:2)

使用集合或地图

对于要求1 - 提供自定义排序功能

For 2 - 删除项目并再次添加(或提供一个包装来执行该操作)

3没有意义(列表有多大,处理器/内存有多快)

4 - 您确定需要吗?当位置突然改变(某些项目被添加或删除)时尝试通过位置访问它似乎有点奇怪

5 - 与1相同