gpt4 book ai didi

c++ - 错误:无法将 ‘minHeap’ 从 ‘std::priority_queue, std::greater >’ 转换为‘std::priority_queue

转载 作者:行者123 更新时间:2023-11-27 23:50:54 26 4
gpt4 key购买 nike

我是 C++ 的初学者。我正在尝试使用 std::priority_queue 创建最大堆和最小堆。只创建一个 maxheap 可以正常工作,但不能同时创建两者。我似乎无法理解错误。我收到以下错误:无法将“minHeap”从“std::priority_queue,compare>”转换为“std::priority_queue”尝试在互联网上搜索但无济于事。下面是代码。

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);
}
}

最佳答案

您正在尝试使用 priority_queue<int, vector<int>, greater<int> > 传递变量类型,但您的函数需要 priority_queue<int>类型。

修正函数原型(prototype):

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);
}

您必须使用引用。这是因为您需要修改原始集合。

关于c++ - 错误:无法将 ‘minHeap’ 从 ‘std::priority_queue, std::greater >’ 转换为‘std::priority_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46552971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com