簡體   English   中英

獲取編譯器錯誤:在 pq 中請求成員推送,它是非類類型 std::priority_queue

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

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