std::is_sorted en C++

La función de C++ std::is_sorted verifica si los elementos en el rango [primero, último] están ordenados en orden ascendente. Los elementos se comparan usando el operador  < .
Hay dos variantes de std::is_sorted: 
 

  1. Sin usar predicado binario 
     
bool is_sorted( ForwardIt first, ForwardIt last );
first, last : the range of elements to examine
Return value : 
true: if the elements are in non-decreasing order.
false: any element in increasing order.
  1. Ejemplo: 
    dado un contenedor de tamaño n y un rango entre [0 … n], escriba un programa para verificar si está ordenado en orden ascendente o no. Se permiten valores iguales en la array y dos valores iguales consecutivos se consideran ordenados. 
     
Input : 2 5 9 4      /*Range = 3*/
Output : Sorted in given range.

Input : 3 5 1 9     /*Range = 3*/
Output : Not sorted in given range.
  1.  

CPP

// CPP program to illustrate
// std::is_sorted
// without binary predicate
#include <iostream>
#include <algorithm>
 
// Driver Code
int main()
{
    int A[] = { 10, 11, 15, 12 };
 
    // Index 0 to 2
    int range1 = 3;
 
    // Index 0 to 3
    int range2 = 4;
 
    // Condition if container is sorted or not in range1
    if (std::is_sorted(A, A + range1)) {
        std::cout << "Sorted in the range : " << range1 << std::endl;
    } else {
        std::cout << "Not Sorted in the range : " << range1 << std::endl;
    }
 
    // Condition if container is sorted or not in range2
    if (std::is_sorted(A, A + range2)) {
        std::cout << "Sorted in the range : " << range2 << std::endl;
    } else {
        std::cout << "Not Sorted in the range : " << range2 << std::endl;
    }
    return 0;
}
  1. Producción : 
     
Sorted in the range : 3
Not Sorted in the range : 4
  1. Hemos discutido otros enfoques aquí
     
  2. Usando predicado binario 
     
bool is_sorted (ForwardIt first, ForwardIt last, Compare comp);
first, last : the range of elements to examine
comp : binary predicate
Return value : 
true: if the elements are in non-decreasing order.
false: any element in increasing order.
  1. Ejemplo: 
    dada una string compuesta solo de caracteres. Compruebe si los caracteres están ordenados. Además, ignore los casos al comparar, es decir, ‘f’ > ‘A’ 
     
Input : AHZP
Output : Not Sorted

Input : Boy
Output : Sorted
  1.  

CPP

// CPP program to illustrate
// std::is_sorted
// using binary predicate
#include <iostream>
#include <algorithm>
 
using namespace std;
 
// Binary predicate
bool ignore_case(char a, char b)
{
    // Converts both characters to lowercase and checks if a <= b
    return (tolower(a) <= tolower(b));
}
 
// Function that checks if string is sorted while ignoring the case
bool check_if_sorted(string str)
{
    // Function call to is_sorted with binary predicate ignore_case
    return is_sorted(str.begin(), str.end(), ignore_case);
}
 
// Driver code
int main()
{
    // String which is to be checked
    string str = "tOY";
 
    // Function returned true, string is sorted
    if (check_if_sorted(str)) {
        cout << "Sorted";
    }
    // Function returned false, string not sorted
    else {
        cout << "Not sorted";
    }
 
    return 0;
}
  1. Producción : 
     
Not sorted
  1. Complejidad temporal: la complejidad es lineal en la distancia entre el primero y el último: compara pares de elementos hasta que se encuentra una falta de coincidencia.

Este artículo es una contribución de Rohit Thapliyal . 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 *