lexicographical_compare is used to implement operator< and friends on all
containers. The code is not optimised for random_access iterators, where we can
find which list is the longest before starting and save one comparison every
loop.

Replace the following line:

for (; __first1 != __last1 && __first2 != __last2;
           ++__first1, ++__first2)

With:

      _InputIterator1 __newlast1 = __first1 + 
                std::min(__last1 - __first1, __last2 - __first2);

      for (; __first1 != __newlast1;
           ++__first1, ++__first2)

(or something similar.

This produces a 15% speed improve on operator< on vector<int>.

If this bug remains I will write up code myself, but I am unable to compile g++
from source at the moment.


-- 
           Summary: Miss lexicographical_compare random access override
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: chris at bubblescope dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32908

Reply via email to