简体   繁体   English

错误:无法将“ minHeap”从“ std :: priority_queue,std :: greater>”转换为“ std :: priority_queue”

[英]error: could not convert ‘minHeap’ from ‘std::priority_queue, std::greater >’ to ‘std::priority_queue

I am a beginner in c++. 我是C ++的初学者。 I am trying to create a maxheap and a minheap using std::priority_queue. 我正在尝试使用std :: priority_queue创建一个maxheap和一个minheap。 Creating just a maxheap works fine but not both. 仅创建一个maxheap可以正常工作,但不能同时工作。 I can't seem to understand the error. 我似乎无法理解该错误。 I get the following error: could not convert 'minHeap' from 'std::priority_queue, compare>' to 'std::priority_queue' Tried searching the internet but to no avail. 我收到以下错误:无法将'minHeap'从'std :: priority_queue,compare>'转换为'std :: priority_queue'试图搜索Internet,但无济于事。 Below is the code. 下面是代码。

void addNum(int num, priority_queue<int> maxHeap, priority_queue<int> minHeap) {
    if (minHeap.size() == 0 || num > minHeap.top()) 
        minHeap.push(num);
    else if (num < minHeap.top())
        maxHeap.push(num);
}

void createHeaps(vector<int> a) {
    priority_queue<int> maxHeap;
    priority_queue<int, vector<int>, greater<int> > minHeap;
    for (int i = 0; i < a.size(); ++i) {
        int num = a[i];
        addNum(num, maxHeap, minHeap);
    }
}

Your are trying to pass variable with priority_queue<int, vector<int>, greater<int> > type, but your function expects priority_queue<int> type. 您正在尝试传递具有priority_queue<int, vector<int>, greater<int> >类型的变量,但是您的函数期望使用priority_queue<int>类型。

Correct the prototype of function: 更正函数原型:

void addNum(int num, priority_queue<int>& maxHeap, priority_queue<int, vector<int>, greater<int> >& minHeap) {
    if (minHeap.size() == 0 || num > minHeap.top()) 
        minHeap.push(num);
    else if (num < minHeap.top())
        maxHeap.push(num);
}

You must use references. 您必须使用引用。 It is because you need to modify original collections. 这是因为您需要修改原始集合。

You have to use correct type for your method too: 您也必须为您的方法使用正确的类型:

void addNum(int num,
            priority_queue<int, >& maxHeap,
            priority_queue<int, std::vector<int>, std::greater<int>>& minHeap) {
    if (minHeap.size() == 0 || num > minHeap.top()) 
        minHeap.push(num);
    else if (num < minHeap.top())
        maxHeap.push(num);
}

Or you might template your method to be more generic 或者您可以将方法模板化为更通用的

template <typename ... Ts1, typename ... Ts2>
void addNum(int num,
            priority_queue<int, Ts1...>& maxHeap,
            priority_queue<int, Ts2...>& minHeap) {
    if (minHeap.size() == 0 || num > minHeap.top()) 
        minHeap.push(num);
    else if (num < minHeap.top())
        maxHeap.push(num);
}

or even, simply: 甚至简单地:

template <typename PriorityQueue1, typename PriorityQueue2>
void addNum(int num,
            PriorityQueue1& maxHeap,
            PriorityQueue2& minHeap) {
    if (minHeap.size() == 0 || num > minHeap.top()) 
        minHeap.push(num);
    else if (num < minHeap.top())
        maxHeap.push(num);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM