C++ 优先级队列 - 根据更新的优先级重新排序

Pau*_*ton 5 c++ multithreading asynchronous priority-queue data-structures

一些背景:我正在构建一个C++线程管理器,它允许用户创建一个AsyncJob对象并分配执行优先级。我有一个JobManager单例类,它管理这些的优先级队列AsyncJobs,并在可用时将它们分配给线程。

问题:用户需要能够修改优先级AFTER创建。例如,基于某些运行时事件,某个文件可能需要比其他文件更紧急地加载。我面临的问题是,优先级队列仅在调用push()或时对内部堆上的元素进行重新排序。pop()据我所知,没有公开的界面允许人们根据不断变化的优先级请求重新排序。

我想做的是这样的:

  • hashmap在我的类中创建一个JobManager,它保存指向优先级队列中对象的指针
  • 用户可以通过其键访问请求的作业并通过哈希映射更新优先级
  • thenJobManager向优先级队列发出优先级已更改的信号
  • 优先级队列在内部重新排序

解决这个问题的最佳方法是什么?我应该创建自己的自定义优先级队列类吗?或者也许从 延伸std::priority_queue

谢谢!

Ben*_*ell 3

一种选择可能是允许您的 AsyncJob 具有“已取消”状态,并且在取消旧的优先级后,每次修改优先级时只需将新的 AsyncJob(副本)添加到您的 PQ 中。

与许多事情一样,我认为“最佳方式”是非常主观的,因为它取决于您受到的限制程度以及您如何量化“最佳”。就我个人而言,如果可能的话,我喜欢避免从标准库类型派生并重新发明容器结构。