Класс SplMinHeap

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

Введение

Класс SplMinHeap предоставляет основные функциональные возможности кучи, сохраняя минимальный элемент наверху.

Обзор класса

class SplMinHeap extends SplHeap {
/* Методы */
protectedfunction compare(mixed $value1, mixed $value2): int
/* Наследуемые методы */
protected function SplHeap::compare(mixed $value1, mixed $value2): int
public function SplHeap::count(): int
public function SplHeap::current(): mixed
public function SplHeap::extract(): mixed
public function SplHeap::insert(mixed $value): true
public function SplHeap::isCorrupted(): bool
public function SplHeap::isEmpty(): bool
public function SplHeap::key(): int
public function SplHeap::next(): void
public function SplHeap::rewind(): void
public function SplHeap::top(): mixed
public function SplHeap::valid(): bool
}

Содержание

  • SplMinHeap::compare — Сравнивает элементы, чтобы во время сортировки корректно разместить их в куче
Добавить

Примечания пользователей 2 notes

up
4
gom
6 years ago
I experimented what happens when arrays are inserted:

<?php
$heap = new SplMinHeap();
$heap->insert([22,333]);
$heap->insert([2,33]);
$heap->insert([222,3]);

var_export($heap->extract());
echo '<br>';
var_export($heap->extract());
echo '<br>';
var_export($heap->extract());
?>

Output:

array ( 0 => 2, 1 => 33, )
array ( 0 => 22, 1 => 333, )
array ( 0 => 222, 1 => 3, )
up
1
andy at nospam dot airslash dot net
10 months ago
To expand on gom's comment, SplMinHeap will also take into account the subsequent elements of the array you inserted, if the elements before that are equal.

<?php 
$heap = new SplMinHeap();
$heap->insert([0, 10]);
$heap->insert([0, 30]);
$heap->insert([0, 15]);
while (!$heap->isEmpty()) {
    [$a, $b] = $heap->extract();
    echo "a:$a, b:$b\n";
}
echo "---\n";
$heap->insert([0, 10, 100]);
$heap->insert([0, 10, 300]);
$heap->insert([0, 10, 150]);
while (!$heap->isEmpty()) {
    [$a, $b, $c] = $heap->extract();
    echo "a:$a, b:$b, c:$c\n";
}
?>

will output:

a:0, b:10
a:0, b:15
a:0, b:30
---
a:0, b:10, c:100
a:0, b:10, c:150
a:0, b:10, c:300
To Top