lexicographical_compare() en C++ STL

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";
}
Producción

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 )";
    }
}
Producción

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];
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *