SplPriorityQueue::compare

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SplPriorityQueue::compare要素の優先順位を比較し、ヒープ内の適切な位置に置く

説明

public SplPriorityQueue::compare(mixed $priority1, mixed $priority2): int

priority1priority2 を比較します。

パラメータ

priority1

比較したい最初のノードの優先順位。

priority2

比較したい 2 番目のノードの優先順位。

戻り値

比較結果を返します。priority1priority2 より大きい場合は正の整数値、等しい場合は 0、 小さい場合は負の整数値となります。

注意:

同一の優先順位の要素が複数存在する場合は、 キューから取り出す際の順序が不定となります。

add a note add a note

User Contributed Notes 2 notes

up
16
Anonymous
15 years ago
At this time, the documentation sais "Note: Multiple elements with the same priority will get dequeued in no particular order."

If you need elements of equal priority to maintain insertion order, you can use something like:

<?php

class StablePriorityQueue extends SplPriorityQueue {
    protected
$serial = PHP_INT_MAX;
    public function
insert($value, $priority) {
       
parent::insert($value, array($priority, $this->serial--));
    }
}

?>
up
0
Anonymous
1 year ago
To create a min-heap priority queue, and have extract() give you the lowest priority:

class MinPriorityQueue extends SplPriorityQueue {
    public function compare($priority1, $priority2) {
        if ($priority1 === $priority2) return 0;
        return $priority1 > $priority2 ? 1 : -1;
    }
}
To Top