php標準庫spl(Standard PHP Library )之優先隊列SplPriorityQueue

php的標準庫提供了一些數據結構,例如堆棧、隊列等,下面我們寫的是一個優先隊列的demo,利用這個類,可以直接實現排序,下面看代碼,

1、實例化類,設置取出數據的時候,要數據還是要優先級,還是兩者都要,然後循環輸出,會自動排序好。

<?php
//優先隊列

$p1 = new \SplPriorityQueue();
$p1->setExtractFlags(SplPriorityQueue::EXTR_BOTH); //數據和優先級都要
// $p1->setExtractFlags(SplPriorityQueue::EXTR_DATA); //只要數據
// $p1->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY); //只要優先級

$p1->insert('mrtwenty', 91);
$p1->insert('dazhaozhao', 98);
$p1->insert('ming', 90);

//循環取出,默認最大值到最小
foreach ($p1 as $value) {
    var_dump($value);
}

2、如果需要更換排序規則,可以繼承並重寫類的compare方法

<?php
//優先隊列

class MinSplPriorityQueue extends \SplPriorityQueue
{
    public function compare($a, $b)
    {
        return $b - $a;
    }
}

$p1 = new MinSplPriorityQueue();
$p1->setExtractFlags(SplPriorityQueue::EXTR_BOTH); //數據和優先級都要
// $p1->setExtractFlags(SplPriorityQueue::EXTR_DATA); //只要數據
// $p1->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY); //只要優先級

$p1->insert('mrtwenty', 91);
$p1->insert('dazhaozhao', 98);
$p1->insert('ming', 90);

//循環取出,默認最大值到最小
foreach ($p1 as $value) {
    var_dump($value);
}

3、如果需要統計個數,可以直接使用count方法

<?php
//優先隊列

$p1 = new \SplPriorityQueue();
$p1->setExtractFlags(SplPriorityQueue::EXTR_BOTH); //數據和優先級都要
// $p1->setExtractFlags(SplPriorityQueue::EXTR_DATA); //只要數據
// $p1->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY); //只要優先級

$p1->insert('mrtwenty', 91);
$p1->insert('dazhaozhao', 98);
$p1->insert('ming', 90);


echo $p1->count();

4、extract和top方法會取出最高的值,兩者有區別,extract會出隊,top不會。

<?php
//優先隊列

$p1 = new \SplPriorityQueue();
$p1->setExtractFlags(SplPriorityQueue::EXTR_BOTH); //數據和優先級都要
// $p1->setExtractFlags(SplPriorityQueue::EXTR_DATA); //只要數據
// $p1->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY); //只要優先級

$p1->insert('mrtwenty', 91);
$p1->insert('dazhaozhao', 98);
$p1->insert('ming', 90);

//獲取最高值,不出隊
$res = $p1->top();
var_dump($res);
echo $p1->count() . "\n";

//獲取最高值,出隊
$res = $p1->extract();
var_dump($res);
echo $p1->count();

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章