PHP 8.5.0 Alpha 2 available for testing

SplMinHeap クラス

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

はじめに

SplMinHeap クラスは、ヒープの主要な機能を提供し、最小値を先頭に保ちます。

クラス概要

class SplMinHeap extends SplHeap {
/* メソッド */
protected compare(mixed $value1, mixed $value2): int
/* 継承したメソッド */
protected SplHeap::compare(mixed $value1, mixed $value2): int
public SplHeap::insert(mixed $value): true
public SplHeap::key(): int
}

目次

add a note

User Contributed Notes 2 notes

up
3
gom
5 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
0
andy at nospam dot airslash dot net
10 days 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