2017-07-30 73 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一個例子。