lexicographical_compare详解

来源:互联网 发布:软件 系统架构图 编辑:程序博客网 时间:2024/06/04 00:33

lexicographical_compare函数功能:按照字典顺序比较前一区间是否小于后一区间.

template<class _InIt1,

         class _InTy,

         size_t _InSize,

         class _Pr> inline

         bool equal(_InIt1 _First1, _InIt1 _Last1,

                   _InTy (&_First2)[_InSize], _Pr _Pred)

         {       // compare [_First1, _Last1) to [First2, ...)

         return (_STD equal(_First1, _Last1,

                   _Array_iterator<_InTy, _InSize>(_First2), _Pred));

         }

 #endif /* _ITERATOR_DEBUG_LEVEL == 0 */

 

                   // TEMPLATE FUNCTION lexicographical_compare

template<class _InIt1,

         class _InIt2> inline

         bool _Lexicographical_compare(_InIt1 _First1, _InIt1 _Last1,

                   _InIt2 _First2, _InIt2 _Last2)

         {       // order [_First1, _Last1) vs. [First2, Last2)

         for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, ++_First2)

                   if (_DEBUG_LT(*_First1, *_First2))//判断是否*_First1<*_First2

                            return (true);

                   else if (*_First2 < *_First1)        //*_First1>*_First2

                            return (false);                               

                   //else  if *_First2 == *_First

         return (_First1 == _Last1 && _First2 != _Last2);

         }

另一重载函数不在赘述.

举例:

int main()

{

         vector<int> vecInt;

         vecInt.push_back( 3 );

         vecInt.push_back( 6 );

         vecInt.push_back( 5 );

 

         list<int> lstInt;

         lstInt.push_back( 3 );

         lstInt.push_back( 12 );

         lstInt.push_back( 10 );

         lstInt.push_back( 6  );

         bool bLess = lexicographical_compare(vecInt.begin(),vecInt.end(),lstInt.begin(),lstInt.end() );

         system( "pause" );

         return 0;

}

需要注意的是,该算法的比较极易出现错误.例如:”111”,”12”.我们认为前者更大,但是实际上是后者更大,原因是长度在此根本不起作用.这类的有string

想要看string更详细的易错问题,请移步至: http://blog.csdn.net/yuanweihuayan/article/details/6641980

原创粉丝点击