1

这个问题与我前段时间问的这个问题有关。

基本上它是关于在某些临界情况下出队如何工作的。例如:

$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

4

1 回答 1

1

由于 foo、bar 和 baz 都具有相同的优先级,它们的顺序是未定义的,因此它们可以以任何顺序出现。请参阅此处的注释http://www.php.net/manual/en/splpriorityqueue.compare.php

笔记:

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

以及同一页面上的顶级用户注释以获取建议的解决方案http://www.php.net/manual/en/splpriorityqueue.compare.php#93999

Matthew Weier O'Phinney 的博客上还有一篇博文,您可能会发现它很有用。

于 2013-04-16T21:13:02.883 回答