1. template <class InputIterator1, class InputIterator2, class Compare>              
  2. bool Lexicographical_compare(InputIterator1 first1, InputIterator1 last1,         
  3.                              InputIterator2 first2, InputIterator2 last2,         
  4.                              Compare comp) {                                      
  5.     for(; first1 != last1 && first2 != last2; ++first1, ++first2) {               
  6.         if(comp(*first1, *first2))                                                
  7.             return true;                                                          
  8.         if(comp(*first2, *first1))                                                
  9.             return false;                                                         
  10.     }                                                                             
  11.     return first1 == last1 && first2 != last2;                                    

     效率至上的SGI还设计了一个特化版本,针对原生指针 const unsigned char*:

  1. inline bool lexicographical_compare(const unsigned char* first1, 
  2.                               const unsigned char* last1, 
  3.                               const unsigned char* first2, 
  4.                               const unsigned char* last2) { 
  5.     const size_t len1 = last1 - first1; 
  6.     const size_t len2 = last2 - first2; 
  7.     const int result = memcmp(first1, first2, min(len1, len2)); 
  8.     return result != 0 ? result < 0 : len1 < len2;