2017-07-30 80 views
-1

我都不得不声明,对最低元素的优先级队列如下如何在功能参数在C++中

priority_queue<int, vector<int> , greater<vector<int>> > low;

现在我想这个对象传递给一些申报优先级队列功能,为了这个,我需要在函数头部声明,我试图声明如下方式

int fun1(priority_queue<int, vector<int> , greater<vector<int>> > min_heap){ 
 
return 0; 
 
}

int fun2(priority_queue<int> min_heap){ 
 
return 0; 
 
}

在这两个办法我收到编译错误

; 由于类型不匹配,第二种方法很明显会给出错误,但编译器不允许采用第一种方法。 请帮帮我。

+0

_in这两种方法我越来越编译错误_并且,您没有复制粘贴错误消息,因为?他们应该确切地说出了什么问题。另外 - 请提供[mcve]。 –

+0

您是否确实打算制作优先队列的副本,以便通过值传递给您的函数?如果没有,您需要打开C++书籍中的章节,解释如何使用引用并读取它。 –

+0

最后一个模板参数用于比较队列中的元素(在你的情况下是'int's),而不是用于存储这些元素的容器(也就是,不是'vector 's)。 –

回答

1

你应该发布编译器错误,但我会尝试猜测你的问题,即使没有它。

你的声明可能是错的,那就是你的:

priority_queue<int, vector<int> , greater<vector<int>> > low; 

应改为

priority_queue<int, vector<int> , greater<int> > low; 

注意第三个模板参数。

既然你有queueint比较必须要过定义,确实,int而不是std::vector<int>

那样就应该编译。 Here一个例子。