lexicographical_compare
Porównuje elementów między dwie sekwencje do określenia, który jest wcześniejsza z dwóch.
template<class InputIterator1, class InputIterator2>
bool lexicographical_compare(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
InputIterator2 _Last2
);
template<class InputIterator1, class InputIterator2, class BinaryPredicate>
bool lexicographical_compare(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
InputIterator2 _Last2,
BinaryPredicate _Comp
);
Parametry
_First1
Wejściowy iteratora adresowania pozycji pierwszego elementu w zakresie pierwszego ma być porównywana._Last1
Wejściowy iteratora adresowania pozycji, jeden obok ostatniego elementu w zakresie pierwszego ma być porównywana._First2
Wejściowy iteratora adresowania pozycja pierwszego elementu w drugi zakres ma być porównywana._Last2
Wejściowy iteratora adresowania pozycji, jeden obok ostatniego elementu w drugim zakresie ma być porównywana._Comp
Zdefiniowany przez użytkownika obiekt funkcji predykatu, który definiuje sens, w którym jeden element jest mniejszy niż inny.Predykat dwuelementowy przyjmuje dwa argumenty i zwraca wartość true po spełnieniu oraz false, jeśli nie jest spełniony.
Wartość zwracana
TRUE Jeśli pierwszy zakres jest leksykograficznym mniej niż drugi zakres; w przeciwnym razie false.
Uwagi
Lexicographical porównanie sekwencji porównuje je elementów do:
Dwa odpowiadające im elementy znalezione nierówne, a w wyniku porównania między sekwencji są uzyskiwane wyniki porównania ich.
Zostaną znalezione nie nierówności, ale jedna sekwencja ma więcej elementów niż drugi, krótszy sekwencji jest uważany za mniej niż dłużej sekwencji.
Zostaną znalezione nie nierówności i sekwencje mają taką samą liczbę elementów i tak sekwencje są równe i wynik porównania jest false.
Przykład
// alg_lex_comp.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>
// Return whether second element is twice the first
bool twice ( int elem1, int elem2 )
{
return 2 * elem1 < elem2;
}
int main( )
{
using namespace std;
vector <int> v1, v2;
list <int> L1;
vector <int>::iterator Iter1, Iter2;
list <int>::iterator L1_Iter, L1_inIter;
int i;
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 5 * i );
}
int ii;
for ( ii = 0 ; ii <= 6 ; ii++ )
{
L1.push_back( 5 * ii );
}
int iii;
for ( iii = 0 ; iii <= 5 ; iii++ )
{
v2.push_back( 10 * iii );
}
cout << "Vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
cout << "List L1 = ( " ;
for ( L1_Iter = L1.begin( ) ; L1_Iter!= L1.end( ) ; L1_Iter++ )
cout << *L1_Iter << " ";
cout << ")" << endl;
cout << "Vector v2 = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
// Self lexicographical_comparison of v1 under identity
bool result1;
result1 = lexicographical_compare (v1.begin( ), v1.end( ),
v1.begin( ), v1.end( ) );
if ( result1 )
cout << "Vector v1 is lexicographically_less than v1." << endl;
else
cout << "Vector v1 is not lexicographically_less than v1." << endl;
// lexicographical_comparison of v1 and L2 under identity
bool result2;
result2 = lexicographical_compare (v1.begin( ), v1.end( ),
L1.begin( ), L1.end( ) );
if ( result2 )
cout << "Vector v1 is lexicographically_less than L1." << endl;
else
cout << "Vector v1 is lexicographically_less than L1." << endl;
bool result3;
result3 = lexicographical_compare (v1.begin( ), v1.end( ),
v2.begin( ), v2.end( ), twice );
if ( result3 )
cout << "Vector v1 is lexicographically_less than v2 "
<< "under twice." << endl;
else
cout << "Vector v1 is not lexicographically_less than v2 "
<< "under twice." << endl;
}
Wymagania
Nagłówek: <algorytm>
Przestrzeń nazw: std