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

时间:2020-02-06 12:16:01

标签: c++ pointers heap priority-queue

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

这可能吗?还是我可以指向该队列,以便在需要时可以指向其他排序的队列?

2 个答案:

答案 0 :(得分:1)

此处的重要部分是不要将排序后的容器(例如std::priority_queue)视为已排序的容器,因为它们实际上不是。顾名思义,它们是 ordered 。而且,只有在将新元素实际插入容器中时,才将它们放置在它们的 ordered 位置,从而完成排序。容器没有重新排序。

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

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

答案 1 :(得分:1)

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

这些:

Compare

外观相似的是2种不同的类型。

您可以 做的是改编std::priority_queue<int, std::vector<int>, std::less<int>>; std::priority_queue<int, std::vector<int>, std::greater<int>>; 函数以查看某些外部状态并基于该状态进行排序。