比較器comp
定義如下。它工作正常,std::sort
,但未能在std::priority_queue
的構造函數中編譯。問題是什麼?謝謝。爲什麼這個自定義比較器在爲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);
^
因爲(http://de.cppreference.com/w/cpp/container/priority_queue)中的['的默認Compare'模板參數]是'STD: :less'你需要一個不同的模板實例化,而在'sort'中調用比較器類型pe自動推導出來。 – BeyelerStudios