![](/img/trans.png)
[英]error: request for member 'push_back' in 'myVector', which is of non-class type 'std::vector<Base>*'?
[英]Getting compiler error: Request for member push in pq, which is of non-class type std::priority_queue
我收到以下錯誤:
:60:8: 錯誤:請求'pq'中的成員'push',它是非類類型'std::priority_queue, std::vector >, std::function, std::pair)> >(比較器)' 60 | pq.push(p1);
我的代碼如下:為 priority_queue 聲明了一個比較器,如下所示:
class comparator
{
bool operator ()(std::pair<int, int> &p, std::pair<int, int> &q)
{
return (p.second < q.second);
}
};
聲明的優先級隊列如下:
std::priority_queue<std::pair<int, int>, vector<std::pair<int, int>>, std::function<bool(pair<int, int>, pair<int, int>)>> pq(comparator);
如下配對:
auto p1 = make_pair(1, 3);
將其推送到 priority_queue 為:
pq.push(p1);
誰能告訴我,我在這里做錯了什么
operator()
必須是public
的,也應該是const
限定的。std::function
。 只需直接提供comparator
作為第三個模板參數。#include <queue>
#include <utility>
#include <vector>
struct comparator {
// must be public and should be const qualified:
bool operator()(std::pair<int, int> &p, std::pair<int, int> &q) const {
return p.second < q.second;
}
};
int main() {
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>,
comparator> // <- the proper comparator
pq;
auto p1 = std::make_pair(1, 3);
pq.push(p1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.