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都有相同的优先级,它们的顺序没有定义,所以它们可以以任何顺序出现。请看这里的注释

注:

具有相同优先级的多个元素将不按特定顺序退出队列

和同一页上的最上面的用户注释,以获得建议的解决方案


还有一篇博客文章,你可能会发现它很有用。

太糟糕了。实际上不需要子类就可以编写解决方案吗?我不这么认为,因为这是类的内部行为。太糟糕了。实际上,不需要子类化就可以编写解决方案吗?我不这么认为,因为这是类的内部行为。