0

我们的游戏引擎使用 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;
    }
}

问题是我一直在对此进行测试并找到了一个有效的案例,其中我可以有两条具有相同索引的相线。我不在乎哪个具有相同值的条目首先结束。

你有什么建议?

4

1 回答 1

1

从技术上讲,排序函数采用小于运算符。您尝试做的似乎与确保以特定顺序返回甚至相等的对象有关。通常你会做

bool
ComparePhaseLineIndexesByAscendingValue::operator() (   const short  lhs, 
                                                        const short  rhs ) const
{
    return lhs < rhs;
}

虽然通常内置类型不需要比较函数(我认为它是任何指定了 < 运算符的类型)。

于 2012-09-25T06:10:05.953 回答