[英]Why C++ returns error when I use my custom constructor in priority queue?
模板類型參數的第三個模板參數必須是類型,而comparator
是 function。 您可以使用decltype(&comparator)
獲得 function 的類型。
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, decltype(&comparator)> pq;
std::priority_queue
的第三個模板參數是一個類型。
comparator
不是一種類型。 它是 function。
但在您解決此問題之前,還有兩個問題需要解決:
types 和 object 必須在使用之前聲明,並且顯示的代碼在使用之前沒有聲明comparator
。
比較器必須將其參數作為const
引用,不允許修改它們。
因此,您的比較器應該是:
static bool comparator(const pair<int, int> &m, const pair<int, int> &n)
它的類型是: bool (*)(const pair<int, int> &, const pair<int, int> &)
這就是std::priority_queue
模板的第三個參數應該是什么,然后必須將實際的比較器傳遞給對象的構造函數, std::priority_queue
有一個重載的構造函數,它將比較器的實例作為參數:
static bool comparator(const pair<int, int> &m, const pair<int, int> &n) {
if (m.second < n.second) return true;
else return false;
}
priority_queue<pair<int, int>, vector<pair<int, int>>,
bool (*)(const pair<int, int> &, const pair<int, int> &)
> pq{comparator};
但是,您會發現其中大部分是不必要的,我展示它只是出於迂腐的目的。 std::priority_queue
的默認比較器模板參數可以正常工作,因為std::pair
實現了operator<
:
priority_queue<pair<int, int>, vector<pair<int, int>>> pq{comparator};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.