Espacios de nombres
Variantes
Acciones

std::lexicographical_compare

De cppreference.com
< cpp‎ | algorithm
 
 
Biblioteca de algoritmos
Políticas de ejecución (C++17)
Operaciones de secuencia no modificantes
(C++11)(C++11)(C++11)
(C++17)
lexicographical_compare

Operaciones de secuencia modificantes
Operaciones en almacenamiento no inicializado
Operaciones de partición
Operaciones de ordenación
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de pila
(C++11)
Operaciones mínimo/máximo
(C++11)
(C++17)
Permutaciones
Operaciones numéricas
Bibliotecas C
 
Definido en el archivo de encabezado <algorithm>
template<class InputIt1, class InputIt2 >

bool lexicographical_compare( InputIt1 first1, InputIt1 last1,

                              InputIt2 first2, InputIt2 last2 );
(1)
template<class InputIt1, class InputIt2, class Compare >

bool lexicographical_compare( InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2,

                              Compare comp );
(2)
Comprueba si el primer intervalo es [first1, last1) lexicográfico' menor que el [first2, last2) segundo rango. La primera versión utiliza operator< para comparar los elementos, la segunda versión utiliza la función de comparación dado comp .
Original:
Checks if the first range [first1, last1) is lexicographically less than the second range [first2, last2). The first version uses operator< to compare the elements, the second version uses the given comparison function comp.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Comparación lexicográfica es una operación con las siguientes propiedades:
Original:
Lexicographical comparison is a operation with the following properties:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • Dos cadenas se comparan elemento por elemento .
    Original:
    Two ranges are compared element by element.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • El elemento descalce primera define qué rango es menos lexicográfico''' o mayor que el otro .
    Original:
    The first mismatching element defines which range is lexicographically less or greater than the other.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si una serie es un prefijo de otro, el rango más corto es lexicográfico' menos que el otro .
    Original:
    If one range is a prefix of another, the shorter range is lexicographically less than the other.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si dos gamas tienen elementos equivalentes y son de la misma longitud, entonces los rangos son iguales lexicográficamente' .
    Original:
    If two ranges have equivalent elements and are of the same length, then the ranges are lexicographically equal.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Un rango de vacío es lexicográfico' menos de cualquier rango que no esté vacía .
    Original:
    An empty range is lexicographically less than any non-empty range.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Dos cadenas vacías son lexicográfico' igual .
    Original:
    Two empty ranges are lexicographically equal.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

Contenido

[editar]Parámetros

first1, last1 -
la primera gama de elementos a examinar
Original:
the first range of elements to examine
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
first2, last2 -
la segunda gama de elementos a examinar
Original:
the second range of elements to examine
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
comp - objeto función de comparación (es decir, un objeto que satisface los requerimientos de Compare) que devuelve ​true si el primer argumento es menor que el segundo.

La signatura de la función de comparación deberá ser equivalente a lo siguiente:

 bool cmp(const Type1 &a, const Type2 &b);

Mientras que la signatura no necesita ser const&, la función no debe modificar los objetos que se le pasaron y debe admitir todos los valores de los tipos (posiblemente const) Type1 y Type2 a pesar de la categoría de valor (por consiguiente, no se permite a Type1 &, ni tampoco a Type1 a menos que para Type1 un movimiento sea equivalente a una copia(desde C++11)).
Los tipos Type1 y Type2 deben ser tales que objetos de tipo InputIt1 y InputIt2 pueden ser desreferenciados y luego convertidos implícitamente a Type1 and Type2 respectively. ​

Requisitos de tipo
-
InputIt1, InputIt2 debe reunir los requerimientos de InputIterator.

[editar]Valor de retorno

true si el primer intervalo es lexicográficamente' menos que el segundo .
Original:
true if the first range is lexicographically less than the second.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[editar]Complejidad

En la mayoría de aplicaciones 2·min(N1, N2) de la operación de comparación, donde N1 =std::distance(first1, last1) y N2 =std::distance(first2, last2) .
Original:
At most 2·min(N1, N2) applications of the comparison operation, where N1 =std::distance(first1, last1) and N2 =std::distance(first2, last2).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[editar]Posible implementación

Primera versión
template<class InputIt1, class InputIt2>bool lexicographical_compare(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2){for(;(first1 != last1)&&(first2 != last2); first1++, first2++){if(*first1 <*first2)returntrue;if(*first2 <*first1)returnfalse;}return(first1 == last1)&&(first2 != last2);}
Segunda versión
template<class InputIt1, class InputIt2, class Compare>bool lexicographical_compare(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare comp){for(;(first1 != last1)&&(first2 != last2); first1++, first2++){if(comp(*first1, *first2))returntrue;if(comp(*first2, *first1))returnfalse;}return(first1 == last1)&&(first2 != last2);}

[editar]Ejemplo

#include <algorithm>#include <iostream>#include <vector>#include <cstdlib>#include <ctime>   int main(){std::vector<char> v1 {'a', 'b', 'c', 'd'};std::vector<char> v2 {'a', 'b', 'c', 'd'};   std::srand(std::time(0));while(!std::lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end())){for(auto c : v1)std::cout<< c <<' ';std::cout<<">= ";for(auto c : v2)std::cout<< c <<' ';std::cout<<'\n';   std::random_shuffle(v1.begin(), v1.end());std::random_shuffle(v2.begin(), v2.end());}   for(auto c : v1)std::cout<< c <<' ';std::cout<<"< ";for(auto c : v2)std::cout<< c <<' ';std::cout<<'\n';}

Posible salida:

a b c d >= a b c d d a b c >= c b d a b d a c >= a d c b a c d b < c d a b
close