Алгоритм 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"; |