lexicographical_compare
Compare deux séquences, élément par élément, pour déterminer lequel est inférieur à l'autre.
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
);
Paramètres
_First1
Un itérateur d'entrée s'adressant à la position du premier élément de la première plage à comparer._Last1
Itérateur d'entrée se rapportant à la position située immédiatement après l'élément final dans la première plage à comparer._First2
Un itérateur d'entrée s'adressant à la position du premier élément de la deuxième plage à comparer._Last2
Itérateur d'entrée se rapportant à la position située immédiatement après l'élément final dans la deuxième plage à comparer._Comp
Objet de fonction de prédicat défini par l'utilisateur qui définit le sens dans lequel un élément est inférieur à un autre. Un prédicat binaire a besoin de deux arguments. Il renvoie true lorsqu'il est satisfait et false dans le cas contraire.
Valeur de retour
true si la première plage lexicographique est inférieure à la deuxième plage ; sinon false.
Notes
Une comparaison lexicographique entre les séquences les compare élément dans l'élément jusqu'à ce que :
Elle cherche deux éléments correspondants inégaux, et le résultat de la comparaison est pris comme résultat de la comparaison entre les séquences.
Aucune inégalité n'est trouvée, mais une séquence a plus d'éléments que l'autre, et la séquence plus courte est considérée inférieure àla séquence supérieure.
Aucune inégalité n'est trouvée et les séquences ont le même nombre d'éléments, donc les séquences sont égales et le résultat de la comparaison est false.
Exemple
// 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;
}
Configuration requise
En-tête : <algorithme>
Espace de noms : std