【PHP8.x】SplPriorityQueue::compare()メソッドの使い方
compareメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
compareメソッドは、SplPriorityQueueにおいて、要素の優先度を比較し、その順序を決定するために使用されるメソッドです。SplPriorityQueueは、追加された要素を優先度に基づいて自動的に並べ替え、最も優先度の高い要素から取り出せるようにする特別なデータ構造です。このcompareメソッドは、新しい要素がキューに追加される際や、キュー内部で要素の順序を調整する必要がある場合に、どの要素がより高い優先度を持つかを判断するために、キューの内部で自動的に呼び出されます。
具体的には、このメソッドは2つの優先度、例えば$priority1と$priority2を引数として受け取ります。そして、これらの優先度を比較した結果を整数値で返します。$priority1が$priority2よりも高い優先度を持つと判断される場合は正の数を、低い優先度を持つ場合は負の数を、そして両者の優先度が同じ場合はゼロを返します。
SplPriorityQueueのデフォルトの実装では、数値が大きいほど優先度が高いと判断されるようにcompareメソッドが動作します。もし、このデフォルトの挙動を変更したい場合、例えば「数値が小さいほど優先度が高い」といった独自の優先度ルールを適用したい場合は、SplPriorityQueueクラスを継承し、このcompareメソッドをオーバーライドすることで、独自の比較ロジックを定義できます。これにより、アプリケーションの特定の要件に合わせた柔軟な優先度管理を実現できます。
構文(syntax)
1<?php 2 3class MyCustomPriorityQueue extends SplPriorityQueue 4{ 5 /** 6 * 2つの優先順位を比較します。 7 * 8 * @param mixed $priority1 比較する最初の優先順位。 9 * @param mixed $priority2 比較する2番目の優先順位。 10 * @return int $priority1 が $priority2 より優先度が低い場合は負の整数、等しい場合は0、高い場合は正の整数を返します。 11 */ 12 protected function compare(mixed $priority1, mixed $priority2): int 13 { 14 // ここにカスタムの比較ロジックを記述します。 15 // 例: 値が大きいほど優先度が高い 16 if ($priority1 === $priority2) { 17 return 0; 18 } 19 return ($priority1 > $priority2) ? 1 : -1; 20 } 21}
引数(parameters)
mixed $priority1, mixed $priority2
- mixed $priority1: 比較対象となる1つ目の優先度
- mixed $priority2: 比較対象となる2つ目の優先度
戻り値(return)
int
SplPriorityQueue::compare()メソッドは、2つの要素の優先度を比較した結果を整数で返します。返り値は、最初の要素が2番目の要素よりも優先度が高い場合は正の値、低い場合は負の値、等しい場合は0となります。