[英]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.