upper_bound y lower_bound para vector no creciente en c++

Las funciones lower_bound() y upper_bound() , por defecto, funcionan en una array no decreciente. La función lower_bound() encuentra el iterador del primer elemento que no se compara menos con el elemento dado. La función upper_bound() devuelve el iterador al primer elemento que es mayor.

Dada una array que convierte esto en un vector no creciente, se aplica la función std:: upper_bound y std:: lower_bound al vector

Para una array ordenada en una array no creciente, lower_bound() encuentra un iterador para el primer elemento que no se compara mayor que el elemento dado. upper_bound() encuentra un iterador al primer elemento que es más pequeño que el elemento dado. Usamos great() para este propósito.

// C++ program to demonstrate the working of lower_bound()
// and upper_bound() for array sorted in non-decreasing
// array,
#include <algorithm>
#include <iostream>
#include <vector>
  
int main()
{
    int unsorted[10] = { 3, 3, 2, 1, 5, 5, 4, 3, 7, 8 };
    std::vector<int> v(unsorted, unsorted + 10);
  
    // sorting vector in non increasing order. Vector
    // becomes {8, 7, 5, 5, 4, 3, 3, 3, 2, 1}
    std::sort(v.begin(), v.end(), std::greater<int>());
  
    std::vector<int>::iterator low, up;
    low = std::lower_bound(v.begin(), v.end(), 3, std::greater<int>());         
    up = std::upper_bound(v.begin(), v.end(), 5, std::greater<int>());          
  
    std::cout << "lower_bound at position " << (low - v.begin()) << '\n';
    std::cout << "upper_bound at position " << (up - v.begin()) << '\n';
  
    return 0;
}
Producción:

lower_bound at position 5
upper_bound at position 4

Publicación traducida automáticamente

Artículo escrito por cr7_bullet 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 *