C++ STL ofrece muchas utilidades para resolver problemas básicos comunes de la vida. La comparación de valores siempre es necesaria, pero a veces también necesitamos comparar las strings. Por lo tanto, lexicographical_compare() se usa para comparar strings .
Se usa comúnmente en los diccionarios para ordenar las palabras alfabéticamente; consiste en comparar elementos que tienen la misma posición en ambos rangos consecutivamente entre sí hasta que un elemento no sea igual al otro. La comparación lexicográfica es la consecuencia de comparar estos primeros componentes no coincidentes. Esta función se define en el encabezado <algoritmo> .
Tiene las siguientes dos implementaciones:
Sintaxis 1:
lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2)
Modelo:
template bool lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2) { while (beg1!=end1) { if (beg2==end2 || *beg2<*beg1) return false; else if (*beg1<*beg2) return true; ++beg1; ++beg2; } return (beg2!=end2); }
Parámetros:
- beg1: iterador de entrada a la posición inicial de la primera secuencia.
- end1: Iterador de entrada a la posición final de la primera secuencia.
- beg2: Iterador de entrada a la posición inicial de la segunda secuencia.
- end2: Iterador de entrada a la posición final de la segunda secuencia.
Valor devuelto: Devuelve un booleano verdadero, si range1 es estrictamente lexicográficamente más pequeño que range2; de lo contrario, devuelve falso.
Ejemplo:
CPP
// C++ code to demonstrate the working of // lexicographical_compare(), implementation 1 #include <algorithm> #include <iostream> using namespace std; // Driver Code int main() { // initializing char arrays char one[] = "geeksforgeeks"; char two[] = "gfg"; // using lexicographical_compare for checking // is "one" is less than "two" if (lexicographical_compare(one, one + 13, two, two + 3)) cout << "geeksforgeeks is lexicographically less " "than gfg"; else cout << "geeksforgeeks is not lexicographically " "less than gfg"; }
geeksforgeeks is lexicographically less than gfg
Sintaxis 2:
lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2, Compare comp)
Modelo:
template bool lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2) { while (beg1!=end1) { if (beg2==end2 || *beg2<*beg1) return false; else if (*beg1<*beg2) return true; ++beg1; ++beg2; } return (beg2!=end2); }
Parámetros:
- beg1: iterador de entrada a la posición inicial de la primera secuencia.
- end1: Iterador de entrada a la posición final de la primera secuencia.
- beg2: Iterador de entrada a la posición inicial de la segunda secuencia.
- end2: Iterador de entrada a la posición final de la segunda secuencia.
- comp: la función de comparación que devuelve un valor booleano verdadero/falso de cada elemento comparado. Esta función acepta dos argumentos. Puede ser un puntero de función o un objeto de función y no puede cambiar los valores.
Valor devuelto: Devuelve un booleano verdadero, si range1 es estrictamente lexicográficamente más pequeño que range2; de lo contrario, devuelve falso.
Ejemplo:
CPP
// C++ code to demonstrate the working of // lexicographical_compare() #include <algorithm> #include <iostream> using namespace std; // helper function to convert all into lower case: bool comp(char s1, char s2) { return tolower(s1) < tolower(s2); } // Driver Code int main() { // initializing char arrays char one[] = "geeksforgeeks"; char two[] = "Gfg"; // using lexicographical_compare for checking // is "one" is less than "two" // returns false as "g" has larger ASCII value than "G" if (lexicographical_compare(one, one + 13, two, two + 3)) cout << "geeksforgeeks is lexicographically less " "than Gfg\n"; else cout << "geeksforgeeks is not lexicographically " "less than Gfg\n"; // using lexicographical_compare for checking // is "one" is less than "two" // returns true this time as all converted into // lowercase if (lexicographical_compare(one, one + 13, two, two + 3, comp)) { cout << "geeksforgeeks is lexicographically less "; cout << "than Gfg( case-insensitive )"; } else { cout << "geeksforgeeks is not lexicographically " "less "; cout << "than Gfg( case-insensitive )"; } }
geeksforgeeks is not lexicographically less than Gfg geeksforgeeks is lexicographically less than Gfg( case-insensitive )
Aplicación: la comparación de strings se puede usar generalmente en el diccionario , donde necesitamos colocar palabras en orden lexicográfico. Un ejemplo de esto puede ser encontrar la palabra que aparece primero en el diccionario entre un conjunto dado de palabras.
CPP
// C++ code to demonstrate the application of // lexicographical_compare() #include <bits/stdc++.h> using namespace std; // Driver Code int main() { // initializing char arrays char list[][100] = { { 'a', 'b', 'a', 'c', 'u', 's' }, { 'a', 'p', 'p', 'l', 'e' }, { 'c', 'a', 'r' }, { 'a', 'b', 'b', 'a' } }; char min[100] = "zzzzzz"; // using lexicographical_compare for checking // the smallest for (int i = 0; i < 4; i++) if (lexicographical_compare( list[i], list[i] + strlen(list[i]), min, min + strlen(min))) strcpy(min, list[i]); // prints "abacus" cout << "The smallest string is : "; for (int i = 0; min[i] != '\0'; i++) cout << min[i]; }
The smallest string is : abacus
Excepción en lexicographical_compare(): lanza una excepción si se lanza una comparación de elementos o una operación en un iterador. Si los argumentos no son válidos, provocan un comportamiento indefinido.
Este artículo es una contribución de Manjeet Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA