私たちのゲーム エンジンはsort
、テンプレートsort
関数を使用してさまざまなオブジェクトの全範囲を並べ替えるために STL を使用します。私が理解しているように、比較ロジックの要件は、内部的に逆の並べ替えを行う可能性があることに基づいて記述する必要があることです (つまり、 from から(a,b)
へのペアリングを逆にします(b,a)
)。
したがって、通常、比較関数は次のようになります。
bool CompareSubGroupReqsByDescendingFillPriority::operator()
( const ScenSubGroupReq& lhs,
const ScenSubGroupReq& rhs ) const
{
if( lhs.mFillPriority > rhs.mFillPriority ) return true;
else if( lhs.mFillPriority < rhs.mFillPriority ) return false;
else return lhs.mForceGroup->ObjectID() > rhs.mForceGroup->ObjectID();
}
私は「else」ステートメントを「ディール ブレーカー」と呼んでいます。lhs と rhs の両方が同じ場合を解決できなければなりません。通常、永続オブジェクトをソートする場合はオブジェクト ID を使用します。
私の質問は、単純なデータ型 (ショートなど) の非永続オブジェクトをソートするときに、どうすればディール ブレーカーを作成できるかということです。
これが私が取り組んでいる例です:
bool
ComparePhaseLineIndexesByAscendingValue::operator() ( const short lhs,
const short rhs ) const
{
if( lhs < rhs ) return true;
else if( lhs > rhs ) return false;
else
{
// should never be here as no two phase lines should have the same index
FPAssert( false );
return false;
}
}
問題は、これをテストしていて、同じインデックスを持つ 2 つのフェーズ ラインを持つことができる有効なケースを見つけたことです。同じ値を持つエントリのどれが最初に終わるかは気にしません。
何をアドバイスしますか?