簡體   English   中英

運行時更改優先級隊列的排序功能

[英]Change sorting function of priority queue during runtime

我有一個帶有自定義排序功能的std::priority_queue 在程序中的某個時刻,我想使用不同的函數重新組織隊列。

這可能嗎? 或者我可以創建一個指向隊列的指針,以便在需要時指向不同排序的隊列?

這里的重要部分是不要將像std::priority_queue這樣的有序容器視為已排序,因為它們確實不是。 相反,顧名思義,它們是有序的 並且只有在新元素實際插入容器時將新元素放入其有序位置,才能完成排序。 沒有對容器進行重新排序。

因此,在運行時更改排序是不可能的,因為隊列中的所有現有元素仍將按照插入時的方式進行排序,並且新元素可能不會被放置在正確的位置,因為排序不再正確.

重新排序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功能以查看某些外部狀態並基於此進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM