SplPriorityQueue::compare
(PHP 5 >= 5.3.0)
SplPriorityQueue::compare — Compare priorities in order to place elements correctly in the heap while sifting up.
Description
Compare priority1
with priority2
.
Parameters
-
priority1
-
The priority of the first node being compared.
-
priority2
-
The priority of the second node being compared.
Return Values
Result of the comparison, positive integer if priority1
is greater than priority2
, 0 if they are equal, negative integer otherwise.
Note:
Multiple elements with the same priority will get dequeued in no particular order.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Структуры данных
- Функция SplPriorityQueue::compare() - Сравнивает приоритеты для корректного помещения элементов в очередь
- Функция SplPriorityQueue::__construct() - Создает новую пустую очередь
- Функция SplPriorityQueue::count() - Производит подсчет элементов в очереди
- Функция SplPriorityQueue::current() - Возвращает текущий узел, на который указывает итератор
- Функция SplPriorityQueue::extract() - Извлекает узел из начала очереди и пересортирует ее
- Функция SplPriorityQueue::insert() - Добавляет элемент в очередь и пересортирует ее
- Функция SplPriorityQueue::isEmpty() - Проверяет, является ли очередь пустой
- Функция SplPriorityQueue::key() - Возвращает индекс текущего узла
- Функция SplPriorityQueue::next() - Переход к следующему узлу
- Функция SplPriorityQueue::recoverFromCorruption() - Восстанавливает корректное состояние очереди
- Функция SplPriorityQueue::rewind() - Переводит итератор на начало очереди
- Функция SplPriorityQueue::setExtractFlags() - Задает режим извлечения узлов
- Функция SplPriorityQueue::top() - Возвращает узел находящийся в начале очереди
- Функция SplPriorityQueue::valid() - Проверяет, есть ли в очереди еще элементы
Коментарии
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--));
}
}
?>
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;
}
}