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's Blogにも、役立つブログ投稿があります。

于 2013-04-16T21:13:02.883 に答える