0

所以,我正在用 C++ 编写一件事,我正在尝试用配对堆实现一个优先级队列。我希望这个优先级随着时间的推移自动增加,这样如果元素(一个类)在堆中已经存在了 5 分钟,它的优先级(一个变量)就会增加。我不知道如何做到这一点。

我可以实现一个函数,在每个设定的时间内检查每个元素的持续时间,但问题是检查堆中的每个元素非常困难。所以我认为我需要在元素中做一些事情,但我不确定是什么以及如何做。

有什么简单的解决方案吗?我觉得我一定是错过了什么,但如果不是这样,那我最好放弃这个想法,因为我必须尽快完成这件事。

UP:这个程序是为人类排队的,所以这个想法的原因是不要让人们等待太久。优先级是任意的,添加每个元素时都会为每个元素设置优先级“级别”,因此将时间设为优先级不是我的解决方案。

4

1 回答 1

0

您可以将元素添加到链表:

  1. 一个新元素被添加到列表的末尾

  2. 当第一个元素在堆中 5 分钟时,它的优先级增加并被移动到列表的末尾。

这样您就可以只检查第一个元素。另一个优点是您可以将计时器设置为要签入的第一个元素的值。也就是说,无需进行不必要的定期检查。

于 2018-02-23T16:27:58.027 回答