我们的游戏引擎使用 STL使用模板函数sort
对各种不同的对象进行排序。sort
据我了解,比较逻辑的要求是您必须在它可能在内部进行反向排序的基础上编写它(即反转配对,例如 from (a,b)
to (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;
}
}
问题是我一直在对此进行测试并找到了一个有效的案例,其中我可以有两条具有相同索引的相线。我不在乎哪个具有相同值的条目首先结束。
你有什么建议?