在运行时更改优先级队列的排序功能

Change sorting function of priority queue during runtime

我有一个带有自定义排序功能的 std::priority_queue。在程序中的某个时刻,我想使用不同的函数重新组织队列。

这可能吗?或者我可以创建一个指向队列的指针,以便在需要时指向不同排序的队列吗?

这里的重要部分是不要将 std::priority_queue 之类的有序容器视为已排序,因为它们实际上不是。相反,顾名思义,它们是 有序。并且只有当新元素实际插入到容器中时,才通过将新元素放入它们的 ordered 位置来完成排序。容器没有重新排序。

因此实际上不可能在 运行 时更改顺序,因为队列中的所有现有元素仍将按照插入时的方式排序,并且新元素可能不会放入正确的地方,因为顺序不再正确。

重新排序 std::priority_queue 的唯一方法是使用新排序函数创建一个新队列,然后将元素从旧队列复制到新队列。

这是不可能的,因为赋予 priority_queueCompare 函数是模板类型,这意味着 Compare 本身属于该类型。

这些:

std::priority_queue<int, std::vector<int>, std::less<int>>;
std::priority_queue<int, std::vector<int>, std::greater<int>>;

虽然看起来相似,但有 2 种不同的类型。

可以做的是调整您的Compare函数以查看一些外部状态并根据它进行排序。