Язык программирования C++. Вводный курс

Алгоритм lexicographical_compare()


template< class InputIterator1, class InputIterator2 >

bool

lexicographical_compare(

   InputIterator1 first1, InputIterator1 last1,

   InputIterator1 first2, InputIterator2 last2 );

template< class InputIterator1, class InputIterator2,

          class Compare >

bool

lexicographical_compare(

   InputIterator1 first1, InputIterator1 last1,



   InputIterator1 first2, InputIterator2 last2,

   Compare comp );

lexicographical_compare()

сравнивает соответственные пары элементов из двух последовательностей, ограниченных диапазонами [first1,last1) и [first2,last2). Сравнение продолжается, пока не будет найдена первая пара различных элементов, не достигнута пара [last1,last2] или хотя бы один из элементов last1 или last2

(если последовательности имеют разные длины). При обнаружении первой пары различных элементов алгоритм возвращает:

·                  если меньше элемент первой последовательности, то true, иначе false;

·                  если last1

достигнут, а last2

нет, то true;

·                  если last2

достигнут, а last1

нет, то false;

·                  если достигнуты и last1, и last2

(т.е. все элементы одинаковы), то false. Иными словами, первая последовательность лексикографически не меньше второй.

Например, даны такие последовательности:

string arr1[] = { "Piglet", "Pooh", "Tigger" };

string arr2[] = { "Piglet", "Pooch", "Eeyore" };

В них первая пара элементов одинакова, а вторая различна. Pooh считается больше, чем Pooch, так как c

лексикографически меньше h (такой способ сравнения применяется при составлении словарей). В этом месте алгоритм заканчивается (третья пара элементов не сравнивается). Результатом сравнения будет false.


Tю тЄюЁюь трЁшрэЄх рыуюЁшЄьр тьхёЄю юяхЁрЄюЁр ёЁртэхэш  шёяюы№чєхЄё  яЁхфшърЄэvщ юс·хъЄ:



#include <algorithm>

#include <list>

#include <string>

#include <assert.h>

#include <iostream.h>

аааааааааа

class size_compare {

public:

аааааааааа bool operator()( const string &a, const string &b ) {

аааааааааа аааа return a.length() <= b.length();

аааааааааа }

};

аааааааааа

int main()

{

аааааааааа string arr1[] = { "Piglet", "Pooh", "Tigger" };

аааааааааа string arr2[] = { "Piglet", "Pooch", "Eeyore" };

ааааааааааааааааа

аааааааааа bool res;

ааааааааааааааааа

аааааааааа // эр тЄюЁюь ¤ыхьхэЄх яюыєўрхь false

аааааааааа // Pooch ьхэ№°х Pooh

аааааааааа // эр ЄЁхЄ№хь ¤ыхьхэЄх Єюцх яюыєўшыш сv false

аааааааааа res = lexicographical_compare( arr1, arr1+3,

ааааааааааааааааааааааааааааааааааа arr2, arr2+3 );

аааааааааа assert( res == false );

ааааааааааааааааа

аааааааааа // яюыєўрхь true: фышэр ърцфюую ¤ыхьхэЄр ilist2

аааааааааа // ьхэ№°х ышсю Ёртэр фышэх ёююЄтхЄёЄтхээюую

аааааааааа // ¤ыхьхэЄр ilist1

аааааааааа list< string, allocator > ilist1( arr1, arr1+3 );

аааааааааа list< string, allocator > ilist2( arr2, arr2+3 );

ааааааааааааааааа

аааааааааа res = lexicographical_compare(

аааааааааа аааааааа ilist1.begin(), ilist1.end(),

аааааааааа аааааааа ilist2.begin(), ilist2.end(), size_compare() );

ааааааааааааааааа

аааааааааа assert( res == true );

аааааааааа

аааааааааа cout << "ok: lexicographical_compare чртхЁ°шыё  єёях°эю!\n";
}


Содержание раздела