0

ヒープが保持できるアイテムの量を制限できるように、PHP の 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$this->insertますparent::insert。それが拡張されたものを使用するのかデフォルトのものを使用するのかわからなかったのでcompare、切り替えました。

奇妙なことに、通常の SplMinHeap を使用して同じ数字を挿入すると、 を呼び出すと 1 が返されtop()ます。

誰かが私が間違っていることを理解するのを手伝ってくれますか?

4

2 に答える 2

0

デフォルトの比較メソッドとまったく同じことを行っているため、比較メソッドが何を達成するのかわかりませんが、それを削除すると問題が解決します。比較メソッドをパブリックとして宣言しました。これにより、基本クラスのメソッドが保護されているため、警告が生成されます。

また、挿入メソッドを直接オーバーライドすることもでき、すべてが正常に機能します:-

class MyHeap extends SplMinHeap {
    public static $limit = 10;

    public function insert($value) {
        if ($this->count() < self::$limit) {
            parent::insert($value);
        } else {
            var_dump($this->top());
        }
    }
};
于 2013-05-26T16:49:18.380 に答える