我有一个指向a的优先级队列struct city.我修改优先级队列外的这些指针指向的对象,并希望告诉优先级队列根据新值"重新排序"自己.
我该怎么办?
例:
#include <iostream>
#include <queue>
using namespace std;
struct city {
int data;
city *previous;
};
struct Compare {
bool operator() ( city *lhs, city *rhs )
{
return ( ( lhs -> data ) >= ( rhs -> data ) );
}
};
typedef priority_queue< city *, vector< city * >, Compare > pqueue;
int main()
{
pqueue cities;
city *city1 = new city;
city1 -> data = 5;
city1 -> previous = NULL; …Run Code Online (Sandbox Code Playgroud) 一些背景:我正在构建一个C++线程管理器,它允许用户创建一个AsyncJob对象并分配执行优先级。我有一个JobManager单例类,它管理这些的优先级队列AsyncJobs,并在可用时将它们分配给线程。
问题:用户需要能够修改优先级AFTER创建。例如,基于某些运行时事件,某个文件可能需要比其他文件更紧急地加载。我面临的问题是,优先级队列仅在调用push()或时对内部堆上的元素进行重新排序。pop()据我所知,没有公开的界面允许人们根据不断变化的优先级请求重新排序。
我想做的是这样的:
hashmap在我的类中创建一个JobManager,它保存指向优先级队列中对象的指针JobManager向优先级队列发出优先级已更改的信号解决这个问题的最佳方法是什么?我应该创建自己的自定义优先级队列类吗?或者也许从 延伸std::priority_queue?
谢谢!
c++ multithreading asynchronous priority-queue data-structures