Saltar al contenido

función para encontrar el último elemento menor o igual que, como lower_bound

Te traemos el resultado a esta aprieto, o por lo menos eso pensamos. Si tienes dudas coméntalo, que para nosotros será un gusto responderte

Solución:

En un contenedor ordenado, el último elemento que es menor o equivalente a xes el elemento antes del primer elemento que es mayor que x.

Así puedes llamar std::upper_boundy disminuya una vez el iterador devuelto. (Antes de decrementar, por supuesto, debe verificar que no sea el iterador de inicio; si lo es, entonces no hay elementos que sean menores o equivalentes a x.)

Aquí hay una función contenedora alrededor de upper_bound que devuelve el número más grande en un contenedor o array que es menor o igual a un valor dado:

template 
  ForwardIterator largest_less_than_or_equal_to ( ForwardIterator first, 
                                                  ForwardIterator last,
                                                  const T& value)

  ForwardIterator upperb = upper_bound(first, last, value);

  // First element is >, so none are <=
  if(upperb == first)
    return NULL;

  // All elements are <=, so return the largest.
  if(upperb == last)
    return --upperb;

  return upperb - 1;

Para obtener una mejor explicación de lo que está haciendo y cómo usar esta función, consulte:

C++ STL — Encuentra el último número menor o igual a un elemento dado en un array o contenedor

He probado su solución de iterador inverso, es correcta.

Dado v está ordenado por '<'

Encuentra el último elemento menor que x:

auto iter = std::upper_bound(v.rbegin(), v.rend(), x, std::greater());
if(iter == v.rend())
    std::cout<<"no found";
else
    std::cout<<*iter;

Encuentre el último elemento menor que igual a x:

auto iter = std::lower_bound(v.rbegin(), v.rend(), x, std::greater());
if(iter == v.rend())
    std::cout<<"no found";
else
    std::cout<<*iter;

esto es mejor que iter -= 1 versión

Sección de Reseñas y Valoraciones

Si para ti ha sido útil este post, sería de mucha ayuda si lo compartieras con más seniors y nos ayudes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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