0

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

  1. 插入对象,在添加时立即对整个结构进行排序,所以我有一个 int 的降序;

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

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

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

  5. 只需要从上到下迭代:从高INT到低INT

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

关于如何使用该结构的一些指示会很好​​,因为我对 C++ 标准库了解不多。

4

2 回答 2

6

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

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

于 2013-01-05T19:10:11.760 回答
2

使用集合或地图

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

对于 2 - 删除该项目并再次添加它(或提供执行此操作的包装器)

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

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

5 - 与 1 相同

于 2013-01-05T16:41:58.933 回答