В основном SplPriorityQueue
класс - это куча, используя max heap
algoritm.Почему класс SplPriorityQueue представляет собой очередь (концептуальный)
Я не понимаю, почему в документации должна быть prioritized queue
, потому что queue
является FIFO коллекция (первый, первым обслужен) - а потому, что SplPriorityQueue
это зависит от priority variable
для функции сравнения, почему очередь ?
Почему класс не просто SplPriorityCollection
?!
->SplPriorityQueue documentation
Вдохновленный Марк Бейкер комментарий я проверил поведение функции сравнения, когда приоритетом является одинаковым для всех элементов, и оказалось, что с тем же приоритетом сбор не FIFO
$objPQ = new SplPriorityQueue();
$objPQ->insert('A', 1);
$objPQ->insert('B', 1);
$objPQ->insert('C', 1);
$objPQ->insert('D', 1);
$objPQ->insert('E', 1);
$objPQ->insert('F', 1);
$objPQ->insert('G', 1);
foreach($objPQ as $val) {
echo $val . "\n";
}
Выход:
A G F E D C B
Потому что (если не указать различные приоритеты) это FIFO .... и в большинстве случаев вы будете указывать одинаковый приоритет для всего ... разница между PriorityQueue и очередью заключается в том, что вы ___ имеете опцию___ для приоритизации записей, чтобы некоторые ___can___ обрабатывались перед другими –
Thx , Я тестировал, и с тем же приоритетом не действует как FIFO. Посмотреть мой отредактированный вопрос. Это очень хороший момент, и я не думал об этом, но это не относится. –
В этом случае вы можете найти ошибку: для очереди поведение должно быть таким, как я описал .... иначе вы могли бы просто использовать splheap –