【问题标题】:Is it possible to change from which "side" objects are added in the priority queue with the same priority?是否可以更改从哪些“侧”对象添加到具有相同优先级的优先级队列中?
【发布时间】:2019-10-22 11:24:57
【问题描述】:

我在 std::vector 中使用带有一些自定义对象的 std::priority_queue。 现在假设当我调用 top() 函数时我有具有相同优先级的对象,我按从最旧到最新的顺序获取它们。 所以我的问题是有可能改变这种行为,所以 top() 在同等优先级的情况下会返回最新的对象?

【问题讨论】:

  • 您可以提供一个自定义的“less”函数,将您自己的排序考虑在内。
  • 当然。只需给他们不同的优先级。

标签: c++ priority-queue


【解决方案1】:

一个简单(但有限)的解决方案是保留一个计数器,并在插入时使用计数器的值作为其他相等对象的辅助键。倒计时而不是倒计时将颠倒优先顺序。

有限,因为计数器可能会换行,但使用 long long 风险不大。

【讨论】:

  • 你能提供一个例子来说明如何做到这一点吗?
  • @J.AntonioPerez:真的只是一个std::priority_queue<std::tuple<Foo, int>>。您可以免费获得std::tuple::operator<
  • @MSalters 所以我应该创建一些内部数据结构来跟踪具有相同优先级的对象,对吗?
  • @ArgusKos:您不需要特殊类型。 std::tuple<YourType, CounterType> 就够了。元组按其字段按字典顺序排列。
猜你喜欢
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2023-04-02
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多