【问题标题】:Automatically increasing variable within a class自动增加类中的变量
【发布时间】:2018-02-23 16:16:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 只使用时间戳怎么样,该时间戳的年龄是优先级?如果你想根据元素在容器中的时间来确定元素的优先级,你可以使用queue
  • 除此之外-您可能不希望“优先级”成为变量;但是一个getter函数;这样您就可以更改优先级的完成方式,而无需更改大量代码
  • 我根本不想按时间确定元素的优先级,优先级会更加随意,例如在添加每个元素时为每个元素设置的“级别”优先级。只需要增加,以便具有较低优先级的元素不会停留太久。

标签: c++ timer priority-queue pairing-heap


【解决方案1】:

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

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

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

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

【讨论】:

  • 我不确定它会如何解决我的问题。我已经在原帖中进一步解释了,我还不够清楚。无论如何,谢谢,将元素存储在堆的其他地方并没有引起我的注意。这可能很有用。
  • 无需将元素存储在其他地方。只需添加一个链接字段并链接元素而不复制它们。
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多