php标准库中的优先队列SplPriorityQueue怎么使用?(继承)

一、总结

1、new对象,然后通过insert方法和extract方法来使用,top方法也很常用。

2、类的话首先想到继承,所以可以继承SplPriorityQueue来实现自己特定功能的优先队列。(继承思想)

二、php标准库中的优先队列SplPriorityQueue怎么使用?

而优先队列SplPriorityQueue是基于(后文介绍)实现的。

SplPriorityQueue简单使用:

 $pq = new SplPriorityQueue();

 $pq->insert('a', 10);
$pq->insert('b', 1);
$pq->insert('c', 8); echo $pq->count() .PHP_EOL; //
echo $pq->current() . PHP_EOL; //a /**
* 设置元素出队模式
* SplPriorityQueue::EXTR_DATA 仅提取值
* SplPriorityQueue::EXTR_PRIORITY 仅提取优先级
* SplPriorityQueue::EXTR_BOTH 提取数组包含值和优先级
*/
$pq->setExtractFlags(SplPriorityQueue::EXTR_DATA); while($pq->valid()) {
print_r($pq->current()); //a c b
$pq->next();
}

三、php手册:SplPriorityQueue

简介

The SplPriorityQueue class provides the main functionalities of a prioritized queue, implemented using a max heap.

类摘要

SplPriorityQueue implements Iterator , Countable {
/* 方法 */
public __construct ( void )
public int compare ( mixed $priority1 , mixed $priority2 )
public int count ( void )
public mixed current ( void )
public mixed extract ( void )
public int getExtractFlags ( void )
public void insert ( mixed $value , mixed $priority )
public bool isCorrupted ( void )
public bool isEmpty ( void )
public mixed key ( void )
public void next ( void )
public void recoverFromCorruption ( void )
public void rewind ( void )
public void setExtractFlags ( int $flags )
public mixed top ( void )
public bool valid ( void )

}

Table of Contents

 quick implementation of SPL Priority Queue: 

 <?php 

 class PQtest extends SplPriorityQueue
{
public function compare($priority1, $priority2)
{
if ($priority1 === $priority2) return 0;
return $priority1 < $priority2 ? -1 : 1;
}
} $objPQ = new PQtest(); $objPQ->insert('A',3);
$objPQ->insert('B',6);
$objPQ->insert('C',1);
$objPQ->insert('D',2); echo "COUNT->".$objPQ->count()."<BR>"; //mode of extraction
$objPQ->setExtractFlags(PQtest::EXTR_BOTH); //Go to TOP
$objPQ->top(); while($objPQ->valid()){
print_r($objPQ->current());
echo "<BR>";
$objPQ->next();
} ?> output: COUNT->4
Array ( [data] => B [priority] => 6 )
Array ( [data] => A [priority] => 3 )
Array ( [data] => D [priority] => 2 )
Array ( [data] => C [priority] => 1 )

四、测试题-简答题

1、SplPriorityQueue的入队方法和出队方法是什么?

解答:insert和extract。top方法也很常用。

2、如何遍历一个SplPriorityQueue?

解答:valid()+current()+next()。

29 while($objPQ->valid()){
30 print_r($objPQ->current());
31 echo "<BR>";
32 $objPQ->next();
33 }

3、SplPriorityQueue的实现原理是什么,用的那种数组结构?

解答:用的大根堆。using a max heap。

4、如何插入一个元素到SplPriorityQueue中去?

解答:$objPQ->insert('A',3);  先值后优先级,是一个map。

5、如何写符合自己功能的优先队列(通过继承)?(有类先想继承)

解答:继承SplPriorityQueue类即可,class PQtest extends SplPriorityQueue 。

6、如何设置SplPriorityQueue的提取数据方式,是值是优先级还是两者都提取?

解答:通过SPLPriorityQueue的setExtractFlags方法,$pq->setExtractFlags(SplPriorityQueue::EXTR_DATA);

php标准库中的优先队列SplPriorityQueue怎么使用?(继承)的更多相关文章

  1. STL笔记(6)标准库:标准库中的排序算法

    STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...

  2. 用CAS操作实现Go标准库中的Once

    Go标准库中提供了Sync.Once来实现"只执行一次"的功能.学习了一下源代码,里面用的是经典的双重检查的模式: // Once is an object that will p ...

  3. 彻底弄清c标准库中string.h里的常用函数用法

    在我们平常写的c/c++程序,一些算法题中,我们常常会用到c标准库中string.h文件中的函数,这些函数主要用于处理内存,字符串相关操作,是很有用的工具函数.而且有些时候,在笔试或面试中也会出现让你 ...

  4. 通过atomic_flag简单自旋锁实现简单说明标准库中锁使用的memory_order

    在使用标准库中的加锁机制时,例如我们使用std::mutex,写了如下的代码(下面的代码使用condition_variable可能更合适) std::mutex g_mtx; int g_resNu ...

  5. Python 标准库中的装饰器

    题目描述 1.简单举例 Python 标准库中的装饰器 2.说说你用过的 Python 标准库中的装饰器 1. 首先,我们比较熟悉,也是比较常用的 Python 标准库提供的装饰器有:property ...

  6. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  7. c/c++标准库中的文件操作总结

    1 stdio.h是c标准库中的标准输入输出库 2 在c++中调用的方法 直接调用即可,但是最好在函数名前面加上::,以示区分类的内部函数和c标准库函数. 3 c标准输入输出库的使用 3.1 核心结构 ...

  8. C标准库中atoi的一种可能的实现

    为避免与标准库中的atoi产生歧义, 我将自己编写的函数命名为strToInt, 以下是示例代码 #include <stdio.h> int strToInt(const char *s ...

  9. php标准库中QplQueue队列如何使用?

    php标准库中QplQueue队列如何使用? 一.总结 1.new对象,然后通过enqueue方法和dequeue方法使用. 二.php标准库中QplQueue队列如何使用? 队列这种数据结构更简单, ...

随机推荐

  1. Vue 的 createElement 函数的参数问题的小笔记

    官方文档的说明. 第二个参数的值是要生成的标签的属性数据.点击查看详情. 第三个参数则是组件标签内的数据,数据里面的内容会渲染在第一个参数的标签内.通常会在此指定各插槽 slot 对应的位置,也可以在 ...

  2. selenium+python自动化处理时间控件

    尝试编写12306网站查询余票信息的自动化脚本时,碰到日期选择的问题,此处做一下记录:

  3. animation-list -帧动画

    帧动画实现起来比较简单,今天接触到使用xml来创建帧动画,记录下来. 它说白了,其实就是动态的展示图片而已 1.在xml中定义帧动画,如下 <?xml version="1.0&quo ...

  4. Android学习笔记进阶十之Matrix错切变换

    刚开始我也不懂啥叫错切变换,一看效果图你就恍然大悟. 对图像的错切变换做个总结: x = x0 + b*y0; y = d*x0 + y0; 与之对应的方法是: Matrix matrix = new ...

  5. Android学习笔记之ViewFlipper

    <1>被添加到ViewFlipper中的两个或两个以上的视图之间将执行一个简单的ViewAnimator动画.一次仅能显示一个子视图.如果需要,可以设置间隔时间使子视图像幻灯片一样自动显示 ...

  6. Swiper+ ejs模板引擎+ iScroll插件知识总结

    一. Swiper swiper是一个应用于移动端的动画插件,原理类似于轮播图 官网 http://www.swiper.com.cn/# html结构 <div class="swi ...

  7. Java BlockingQueue Example(如何使用阻塞队列实现生产者-消费者问题)

    Today we will look into Java BlockingQueue. java.util.concurrent.BlockingQueue is a java Queue that ...

  8. BP神经网络公式推导及实现(MNIST)

    BP神经网络的基础介绍见:http://blog.csdn.net/fengbingchun/article/details/50274471,这里主要以公式推导为主. BP神经网络又称为误差反向传播 ...

  9. angular4开发过程中遇到的问题和知识点记录

    1. angular2中的属性有什么区别,为什么会报错呢? 元素上有两种属性:property和attribute,attribute是通过getAttribute()和setAttribute()方 ...

  10. UVA 10943 - How do you add? 递推

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...