我需要存储具有执行时属性的动作对象以及对执行者(单元)本身的引用。当一个单元执行一个动作时,它将被添加到PriorityQueue中,并带有执行该动作所需的时间。此表演者不能再次执行,直到它再次出现在列表中。我之前从未使用过优先级,所以我不知道它的能力。
那怎么办呢?让我们看一下以下排序的操作:
time:1600 -> unit:1
time:3700 -> unit:2
time:12000 -> unit:3
现在,我希望访问此数据结构并将所有这些time
属性降低1600,并使单元1再次执行。如果我不断加入时间,我很快会遇到最大限度。我可以使用很长时间,但最终我会遇到同样的问题。无论如何,我想对于每种类型我必须遍历完整列表或设置为改变其中的对象属性。插入时我只是比较在PriorityQueue等结构中快速插入的时间。
那么我应该使用什么数据结构?
答案 0 :(得分:1)
您可以轻松地从优先级队列中删除第一个元素。
我建议您使用额外的整数值delta
可以存储差异。
使用此approch,如果从优先级队列中删除节点3700 / unit 2,则只需计算3700-delta。
删除元素后,您必须再次更改此增量。
实际上,您不会通过向所有条目添加特定值来更改优先级队列中的顺序,因此您不必更改数据结构本身。
要防止增量增加到无穷大,您必须全部更新 delta达到阈值后的条目。 这种方法的优点是,您只需更新数据 元素很少。
优先级队列是此问题的最佳方法之一。 主要优点是始终具有最低优先级的元素 在顶部。