zoukankan      html  css  js  c++  java
  • STL sort “invalid operator <”

    跟踪了下,是比较函数(下面的_Pred)的问题:

    template<class _Pr, class _Ty1, class _Ty2> inline
    
    bool _Debug_lt_pred(_Pr _Pred,
    _Ty1&& _Left, _Ty2&& _Right,
    _Dbfile_t _File, _Dbline_t _Line)
    {	// test if _Pred(_Left, _Right) and _Pred is strict weak ordering
    if (!_Pred(_STD forward<_Ty1>(_Left), _STD forward<_Ty2>(_Right)))
        return (false);
    else if (_Pred(_STD forward<_Ty2>(_Right), _STD forward<_Ty1>(_Left)))
        _DEBUG_ERROR2("invalid operator<", _File, _Line);
    return (true);
    }
    

      在两项相等的时候,应该返回false,否则就会出现异常情况。

    因为上面的代码中,首先两者相等返回了true,第一个if判断失败,到else if的时候将两者反序,仍然返回true,就抛出了异常。

    也就是这里要求正序返回true的时候,反序就该返回false。正序返回false的时候(也可能是相等情形,那反序也会返回false),不会进入第二个判断,所以不会有问题。

  • 相关阅读:
    UVA Live Achrive 4327 Parade (单调队列,dp)
    从磁盘读取一个文件到内存中,再打印到控制台
    二分查找法
    日期:Date
    线程与进程
    泛型基本知识
    泛型
    Map集合的遍历方式:
    Arrays
    Set接口
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4352830.html
Copyright © 2011-2022 走看看