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