忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/19 16:16 |
PHP5.4.4 SplPriorityQueue
PHP5.3でSplPriorityQueue、優先度つきキューが実装されました。
取得時、第二引数の値が高いものから順に並べ替えられます。
<?php
	
	$queue = new SplPriorityQueue();
	
	$queue->insert('低い', 10);
	$queue->insert('最優先', 100);
	$queue->insert('にばんめその1', 50);
	$queue->insert('にばんめその2', 50);
	$queue->insert('一番低い', 1);
	
	// 個数 → 5
	print('件数:' . $queue->count());
	
	// 一番目を閲覧。これは使っても無くならない。
	print('一番目:' . $queue->top());
	
	// 優先順位の高い順に取り出す
	foreach($queue as $key=>$val){
		print('キー:' . $key . ' 値:' . $val);
	}
	
	// 一度使うと無くなる → 0
	print('件数:' . $queue->count());
	
	// rewindは意味がない
	$queue->rewind();

出力
    件数:5
    一番目:最優先
    キー:5 値:最優先
    キー:4 値:にばんめその2
    キー:3 値:にばんめその1
    キー:2 値:低い
    キー:1 値:一番低い
    件数:0


優先したいデータから順に表示することができました。
なお、同じ優先度内での順番がどうなるかは保証されていません。

実用としてはわりと困ることに、Wikipediaの定義通りの実装がなされています。
どういうことって一度使ったら無くなってしまうんですよね。
具体的にはSplPriorityQueue::next()したときに、イテレータを進めるかわりにshiftするので値が消滅します。
なので繰り返し使う場合はcloneするか、配列に取り出すなどしてから扱う必要があります。

PR


2013/04/29 19:07 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.4.7 PHPでarray_flatten関数 | HOME | 買ったものリスト 2013/04/28>>
忍者ブログ[PR]