SplPriorityQueue::compare

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

SplPriorityQueue::compare比较优先级以在筛选时将元素正确放置在堆中

描述

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

比较 priority1priority2

参数

priority1

要比较的第一个节点的优先级。

priority2

要比较的第二个节点的优先级。

返回值

比较的结果,如果 priority1 大于 priority2,则为正整数;如果它们相等,则为 0;否则为负整数。

注意:

具有相同优先级的多个元素将以不确定的顺序出队。

添加注释

用户贡献的注释 2 个注释

17
匿名
14 年前
目前,文档中说“注意:具有相同优先级的多个元素将以不确定的顺序出队。”

如果你需要具有相同优先级的元素保持插入顺序,你可以使用类似以下的东西

<?php

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

?>
0
匿名
11 个月前
要创建一个最小堆优先级队列,并让 extract() 返回最低优先级

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