我定義了一個priority_queue<pair<double, int>>
。較小的double值具有較高的優先級。如果隊列中有多個相同的double值,則隨機彈出一個值。例如:(<0.1, 1>, <0.1,2>, <0.1, 0>,<0.1,5>)
,如何隨機彈出其中一個?我不確定我的想法是否合理。因爲元素的位置已經確定,當它被推入隊列時。如何比較priority_queue中的兩個元素
1
A
回答
2
如果「隨機」你的意思是它應該與double
的最低值的所有項目中進行真正的(僞)隨機選擇,那麼這是不是std::priority_queue
可以爲你做—它不是專爲。您最好的選擇是彈出並保存所有項目,同時優先級相同,然後隨機選擇一個,然後重新插入隊列。
如果,另一方面,你的意思是「隨機」,如「其中任何一個好」,那麼你可以簡單地做一個自定義比較這隻會考慮的的first
數據成員的值對。當這些同意將取決於優先級隊列的內部實現(並且可能還有插入順序)時,哪一個被彈出。對於許多目的來說,這可能是「隨機」的。
在代碼中,第二個選項是這樣的:
struct DoublePriority
{
bool operator() (const std::pair<double, int> &lhs, const std:pair<double, int> &rhs) const {
return lhs.first > rhs.first;
}
};
std::priority_queue<std::pair<double, int>, std::vector<std::pair<double, int>>, DoublePriority> theQueue;
+0
我之前使用過這種方法。但是現在它總是選擇具有較大節點ID的對。我用這個計算最短路徑。如果我有相同的double值(到src的距離),但是來自不同的int(節點ID),我只想隨機選擇一個節點ID並相應地彈出該對。也許我應該改變我的方法,priority_queue不是爲此設計的。 – user2585677
2
相關問題
- 1. 比較兩個數組中的元素
- 2. 如何比較matlab中的兩個單元格元素?
- 3. 在OpenXML中比較兩個XML元素
- 4. 如何比較兩個向量元素使用循環元素
- 5. 比較兩個元組列表中元素之間的元素
- 6. 在priority_queue中比較參數
- 7. 比較兩個選擇元素的值
- 8. java的實現比較兩個元素
- 9. 比較兩個向量的元素
- 10. 比較的兩個數組PHP元素
- 11. 兩個列表的比較元素
- 12. Python:比較兩個數組的元素
- 13. 如何比較xml文件中的兩個元素?
- 14. 如何比較SQL Server中的兩個字符串元素
- 15. 如何比較兩個數組中的元素?
- 16. 如何比較javascript中兩個元素的位置
- 17. 如何比較Coq中相同Set的兩個元素(相等)?
- 18. 如何比較兩個哈希中的元素
- 19. 如何比較Tridion中的任意兩個元素或頁面
- 20. std :: priority_queue不同的比較
- 21. 比較兩個列表元素與LINQ
- 22. 如何比較量角器中兩個窗口之間兩個元素的值?
- 23. 如何比較兩個HTML5的畫布元素的內容?
- 24. c#列表比較器使用兩個比較元素
- 25. STL priority_queue副本比較級
- 26. 如何比較ArrayList元素
- 27. 如何比較沒有ID或類的兩個元素jQuery
- 28. 如何比較兩個元素的等價性?
- 29. 如何比較兩個innerHTML元素的數值?
- 30. 如何比較由兩個值組成的元素? (pareto最佳)
由於您使用的是std :: pair,所以在對隊列中的元素進行排序時,也使用了pare的int成員部分 – NathanOliver
您是否問如何在具有相同'double的元素中隨機選擇一個元素'價值?如果是這樣的話:因爲底層容器沒有公開,你可以用相同的'double'彈出這些值並選擇一個或者推出你自己的版本。不知道我明白你在問什麼 –
計算機科學中的隊列非常類似於現實生活中的隊列,東西在一個和另一個之間進入。這意味着真的沒有辦法隨機訪問元素。 –