Php 临界情况下SplPriorityQueue的意外行为
这个问题与我不久前问的有关 基本上,这是关于在一些临界情况下排队是如何工作的。例如:Php 临界情况下SplPriorityQueue的意外行为,php,spl,Php,Spl,这个问题与我不久前问的有关 基本上,这是关于在一些临界情况下排队是如何工作的。例如: $queue = new SplPriorityQueue(); $queue->insert('foo', 0); $queue->insert('bar', 0); $queue->insert('baz', '0'); 我期待的是完全相同的订单foobarbaz: while ($queue->valid()) { var_dump($queue->current
$queue = new SplPriorityQueue();
$queue->insert('foo', 0);
$queue->insert('bar', 0);
$queue->insert('baz', '0');
我期待的是完全相同的订单foo
bar
baz
:
while ($queue->valid()) {
var_dump($queue->current());
$queue->next();
}
原来是
foo
baz
bar
。你能解释一下为什么baz
在bar
之前吗?因为foo、bar和baz都有相同的优先级,它们的顺序没有定义,所以它们可以以任何顺序出现。请看这里的注释
注:
具有相同优先级的多个元素将不按特定顺序退出队列
和同一页上的最上面的用户注释,以获得建议的解决方案
还有一篇你可能会发现有用的博客文章。因为foo、bar和baz都有相同的优先级,它们的顺序没有定义,所以它们可以以任何顺序出现。请看这里的注释 注: 具有相同优先级的多个元素将不按特定顺序退出队列 和同一页上的最上面的用户注释,以获得建议的解决方案
还有一篇博客文章,你可能会发现它很有用。太糟糕了。实际上不需要子类就可以编写解决方案吗?我不这么认为,因为这是类的内部行为。太糟糕了。实际上,不需要子类化就可以编写解决方案吗?我不这么认为,因为这是类的内部行为。