所以,我在c ++上编写了一个代码,我正在尝试使用配对堆来实现优先级队列。我希望这个优先级随着时间的推移自动增加,这样如果元素(一个类)已经在堆中,比如5分钟,那么它的优先级(变量)会增加。我不知道如何实现这一目标。
我可以实现一个函数来检查每个元素每个时间段的持续时间,但问题是检查堆中的每个元素是非常困难的。所以我认为我需要在元素中做一些事情,但我不确定是什么以及如何。
有没有简单的解决方案?我觉得我必须遗漏一些东西,但如果情况不是这样,那么我最好放弃这个想法,因为我必须尽快完成这件事。
UP:这个程序是针对人类排队的,所以这个想法的原因是不要让人等待太久。优先级是任意的,每个元素添加时都会设置优先级“级别”,因此优先考虑时间不是我的解决方案。
答案 0 :(得分:0)
您可以将元素添加到链接列表中:
新元素将添加到列表的末尾
当第一个元素在堆中持续5分钟时,它的优先级会增加,并且会移动到列表的末尾。
这样您只能检查第一个元素。另一个优点是您可以将计时器设置为要检入的第一个元素的值。也就是说,不需要进行不必要的定期检查。