función std :: upper_bound () con ejemplo en STL C ++

En este artículo, vamos a aprender sobre el uso de la función de la biblioteca de límite superior () y cómo usar eso?

std :: upper_bound ()

std :: upper_bound () es una función de biblioteca STL, que viene bajo la biblioteca cabecera algoritmo y encuentra el límite superior del elemento de búsqueda en un intervalo . Límite superior mediante el siguiente elemento más importante en la gama ordenada class el elemento de búsqueda.

Say el rango es: [4, 5, 6, 9, 12] y el elemento de búsqueda es 6, entonces el límite superior es 9 en sí. Si el elemento de búsqueda es 7, entonces el límite superior será de nuevo 9.

Casos:

  1. Cuando existe un elemento de búsqueda:
    std :: upper_bound () devuelve un iterador al siguiente elemento de mayor del elemento de búsqueda
  2. Cuando elemento de búsqueda no existe:

    1. Si todos los elementos son mayores que el elemento de búsqueda:
      de límite superior () devuelve un iterador para comenzar de la gama.
    2. Si todos los elementos son más bajos que el elemento de búsqueda:
      upper_bound () devuelve un iterador a extremo de la gama (No límite superior existe).
    3. De lo contrario,
      de límite superior () devuelve un iterador al siguiente elemento mayor al elemento de búsqueda (El mayor elemento más próximo que el elemento de búsqueda) de la gama.

Para utilizar el upper_bound () las necesidades van a ser ordenados.

Sintaxis:

ForwardIterator upper_bound(
ForwardIterator first,
ForwardIterator last,
const T& searching_element
);

Parámetro (s):

  • ForwardIterator primera : iterador para el inicio del rango
  • ForwardIterator última : iterador hasta el final de el rango
  • class T & amp; searching_element : T es el tipo de datos y searching_element es el elemento que límite superior se encuentra

for Tipo: El tipo class es un iterador al límite superior que se encuentra en la gama.

C ++ Implementación:

#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> arr{ 6, 5, 9, 12, 4 };
//sort before using upper_bound()
sort(arr.begin(), arr.end());
int searching_element = 6;
vector<int>::iterator it;
it = upper_bound(arr.begin(), arr.end(), searching_element);
//if all elements are smaller than the searching
//element then no upper bound exists
if (it == arr.end()) {
cout << "No upper bound existsn";
}
else
cout << "Upperr bound of " << searching_element << ": " << *it << endl;
searching_element = 7;
it = upper_bound(arr.begin(), arr.end(), searching_element);
//if all eleemnts are smaller than the searching
//element then no upper bound exists
if (it == arr.end()) {
cout << "No upper bound existsn";
}
else
cout << "Upper bound of " << searching_element << ": " << *it << endl;
return 0;
}

de salida:

Upperr bound of 6: 9
Upper bound of 7: 9

En lo anterior upper_bound () función, para comparar entre elementos class operador comparador ‘& lt;’ se utiliza.

Pero tenemos una función versión extendida que utiliza un comparador definida por el usuario para comparar b / w elementos.

ForwardIterator upper_bound(
ForwardIterator first,
ForwardIterator last,
const T& searching_element,
Comparator comp
);

Parámetro (s):

  • ForwardIterator primera : iterador para el inicio del rango
  • ForwardIterator última : iterador hasta el final de la gama
  • class T & amp ; searching_element : T es el tipo de datos y searching_element es el elemento que límite superior se encuentra
  • Comparador los : definida por el usuario comparador

const tipo: El tipo class es un iterador a los encontrados límite superior de la gama.

Esto puede ser útil si usted tiene los tipos de datos definidos por el usuario.


Deja un comentario

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