簡體   English   中英

為什么這個自定義比較器在構造std :: priority_queue時失敗,而它適用於std :: sort?

[英]Why does this custom comparator fail in construcing std::priority_queue while it works for std::sort?

比較器comp定義如下。 它適用於std::sort ,但無法在std::priority_queue的構造函數中編譯。 問題是什么? 謝謝。

#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

bool comp(int a, int b) { return a > b; }

int main()
{
    vector<int> vec = {4, 2, 1, 3};
    sort(vec.begin(), vec.end(), comp); // OK
    priority_queue<int> q1(less<int>(), vec); // OK
    priority_queue<int> q2(comp, vec); // Fail
    return 0;
}

錯誤信息:

error: no matching function for call to 'std::priority_queue<int>::priority_queue(bool (&)(int, int), std::vector<int>&)'
  priority_queue<int> q2(comp, vec);
                                  ^

std::priority_queue的默認比較器的類型是std::less<T> ,其中T是值類型。 您正在傳遞類型為bool(*)(int, int) 作為函數的std::sort()可以推導出比較器的類型。 類類型不能推斷出它們的模板參數(但是 - 我們在C ++委員會中討論了未來的版本可能有類模板,其模板參數可以推導出來。

您可以使用

std::priority_queue<int, std::vector<int>, bool(*)(int, int)> q(comp);

或者,避免難以內聯的函數指針:

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

暫無
暫無

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

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