2015-07-21 66 views
1
類的

(以前簡稱)STL Priority Queue on custom class創建性病的std ::優先級隊列::對定製

這聽起來過於複雜,但我想創建一個std ::對定製類和二維數組enum availability類型。 這裏是隊列的聲明:

std::priority_queue < std::pair<Panel_string, availability**>*, std::vector<std::pair<Panel_string, availability**>*>, compareString > queue_string; 

和這裏是隊列中的比較功能(每對將根據其權重來排序):

struct compareString { 
bool operator() (const std::pair<Panel_string, availability**>* left, const std::pair<Panel_string, availability**>* right) const { 
    return left->first->weight > right->first->weight; 
} 
}; 

我稱爲上方連結爲此的語法。

但是,我無法編譯它,因爲在compareString結構中只檢測到兩個錯誤。在Visual Studio中,兩條紅線顯示在「左」和「右」(struct compareString的第3行),兩者都提示:

IntelliSense: expression must have pointer type

如果你是我要找的,請幫我)專家:

+1

這不是對一個隊列。這是一個指針隊列。但爲什麼所有的指針呢? – juanchopanza

+0

雙指針('availability **')可以像二維數組一樣使用,但語義上有些不同,因爲不能保證所有行/列的長度都相同(它可能是「鋸齒狀數組」 )。動態二維數組可能更好地用單個指針('availability *')完成,在這裏計算索引(類似於'i * rows + j')。 – celticminstrel

回答

2

你對選手的第一個元素是不是指針,所以不要使用->

return left->first.weight > right->first.weight; 

->是用於必須具有指針類型表達式中使用(或評估該超載operator->的東西的情況。)

+0

是的,發佈後發現它(過去2小時內找不到它)。對不起,這樣一個簡單的錯誤打擾... – Caladbolgll