[英]How can I create a priority queue of pairs that's sorted by the first element and then by the second?
我根據我在矢量中使用的內容創建了一個 lambda comp,但它不起作用,我想知道它為什么不起作用以及如何正確地進行。
代碼:
auto cmp=[](const std::pair<int,int>& a,const std::pair<int,int>& b){
return (b.first>a.first)||(b.second>a.second);
};
std::priority_queue<std::pair<int,int>,std::vector<std::pair<int,int>>,decltype(cmp)> q(cmp);
正如你在評論中提到的: std::greater<std::pair<int, int>>
工作得很好,而你的不工作是因為比較方程式不夠“嚴格” - 正確。
讓我們取兩對 p1 = (3,5) 和 p2 = (4,2),如果我們根據您的 function 比較 p1 和 p2,它將 output cmp(p1, p2) = true
因為b.first > a.first // 4 > 3
。
此外,如果我們以相同的方式比較 p2 和 p1(唯一的區別是 p1 和 p2 的順序),它將 output cmp(p2, p1) = true
因為b.second > a.second // 5 > 2
。
什么都不說,當a == b
時,如果我們將一些對與自身進行比較,它將是false
。
因此,編譯器在再次比較相同的對時肯定會遇到問題,但這次是相反的順序。
由於問題不包含有關如何使用隊列的許多細節,因此問題必須是這樣的。 這就是為什么greater
工作而不是這個。 如果你想自己做,你應該嘗試更具體和嚴格的方程式,嘗試使用&&
運算符而不是||
並考慮相等的變體。
希望它能有所幫助,幾年前我遇到過類似的問題,當時我試圖用我的方式對向量對進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.