我試圖擴展PHP的SplMinHeap,所以我可以限制我的堆可以容納的項目數量。問題是,當我嘗試訪問頂層元素時,它應該是最小值,它給了我最大值。我到目前爲止的代碼非常簡單:SplMinHeap和頂部
class MyHeap extends SplMinHeap {
public static $limit = 10;
public function compare($value1, $value2) {
return ($value1 - $value2);
}
public function myInsert($value) {
if ($this->count() < self::$limit) {
$this->insert($value);
} else {
var_dump($this->top());
}
}
};
當我插入數字1到15我希望它打印1 5倍,而不是將其打印10.我也試圖擴展插件的方法,使用與myInsert
相同的代碼,但用parent::insert
代替$this->insert
。我只是不知道這是否會使用我的擴展compare
或默認的,這就是爲什麼我切換它。
奇怪的是,如果使用正常的SplMinHeap並插入相同的數字,我將在調用top()
時得到1。
任何人都可以幫我弄清楚我做錯了什麼嗎?
似乎定義比較函數定義的堆型。如果您將創建自己的比較函數 - 您將擁有自己的堆類型)祝您好運。 –
@u_mulder這可能是不這樣做的一個很好的理由:) – vascowhite