SplPriorityQueue::compare
(PHP 5 >= 5.3.0, PHP 7)
SplPriorityQueue::compare — Сравнивает приоритеты для корректного помещения элементов в очередь
Описание
Сравнивает priority1
с priority2
.
Список параметров
-
priority1
-
Приоритет первого узла.
-
priority2
-
Приоритет второго узла.
Возвращаемые значения
Результат сравнения, положительное число, когда priority1
больше priority2
, 0 если они равны, и отрицательное число
в остальных случаях.
Замечание:
При добавлении нескольких элементов с одинаковым приоритетом точный порядок следования этих элементов в очереди не определен.
- 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;
}
}