相关疑难解决方法(0)

如何告诉std :: priority_queue刷新它的排序?

我有一个指向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++ stl priority-queue

14
推荐指数
3
解决办法
1万
查看次数

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

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

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

我想做的是这样的:

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

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

谢谢!

c++ multithreading asynchronous priority-queue data-structures

5
推荐指数
1
解决办法
1531
查看次数