がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

SplHeapクラス実験覚書

覚書なんで本当にmemo程度。

<?php

// とりあえず作る
$obj = new SplMaxHeap();
var_dump($obj->isEmpty());
var_dump(count($obj));

// 普通にforeach test
for($i = 0; $i < 20; $i ++) {
  $obj->insert(rand(0, 100));
}
var_dump($obj->isEmpty());
var_dump(count($obj));

foreach($obj as $key => $val) {
  print "{$key} => {$val}\n";
}
var_dump($obj->isEmpty());
var_dump(count($obj));

// extractを使うやり方 test
for($i = 0; $i < 20; $i ++) {
  $obj->insert(rand(0, 100));
}
while($obj->valid()) {
  var_dump( $obj->extract() );
}
var_dump($obj->isEmpty());
var_dump(count($obj));

// key取得して配列アクセス test
for($i = 0; $i < 20; $i ++) {
  $obj->insert(rand(0, 100));
}
while($obj->valid()) {
  var_dump($obj[$obj->key()]);
  $obj->next();
}
var_dump($obj->isEmpty());
var_dump(count($obj));

最後の配列アクセスは

Fatal error: Cannot use object of type SplMaxHeap as array in /home/furu/t.php on line

でエラー。 ArrayAccess を継承してないんだねぇ。継承させたの作ったらそれはそれで便利そうな気がせんでもないが。


foreachした後、isEmptyがtrueになる点に注意。

while条件、valid使ってるけど、何となくisEmptyつかって「false === isEmpty」のほうがわかりやすいだろうか? とか微妙に思案。