2015-11-02 93 views
0

當我使用一個優先級隊列,這是代碼:優先級隊列自定義比較分段故障推

typedef vector<int> state; 
typedef bool (*comp)(const state&, const state&); 
typedef priority_queue<state, vector<state>, comp> prioq; 

prioq prio; 

我使用一個自定義的比較,即定義如下:

bool comparator (const state& a , const state& b) { 
    return a[0] < b[0]; 
} 

我可以推第一個狀態,但是當我嘗試推第二個時,我得到一個分段錯誤:11.

我不知道比較器是否正確,我真的不知道如何創建一個自定義比較河我試圖按每個狀態的第一個數字排序優先級隊列。

在此先感謝。

+0

存儲載體的優先級隊列是不是最好的主意 –

+0

我需要存儲的一維或多維矢量。任何其他想法? –

回答

0

prioq prio;使用默認構造的比較器(在您的情況下,類型爲comp)構造一個優先級隊列。這意味着內部存儲的指向比較函數的指針實際上初始化爲零。比較器(如果默認構造一個是不夠的)可以被初始化爲構造函數的參數傳遞的值:

prioq prio(&comparator); 
//   ~~~~~~~~~~^ 
+0

我收到以下2個錯誤: /puzzle.cpp:17:13:錯誤:使用未聲明的標識符'comparator';你的意思是'運營商'嗎? prioq prio(&comparator); ^ ~~~~~~~~~ 運營商 ./puzzle.cpp:17:23:error:expected a type prioq prio(&comparator); –

+0

@ elena.bdc在提及此名稱之前放置'comparator'的聲明 –

+1

謝謝,它已完成:) –