Implementación de lower_bound y upper_bound en Set of Pairs en C++

Requisito previo: establecer la función lower_bound() en C++ STL , establecer la función upper_bound() en C++ STL

lower_bound() devuelve un iterador que apunta al primer elemento en el rango [first, last) que tiene un valor mayor o igual al valor dado «val» . Pero en el conjunto de pares lower_bound() for pair(x, y) devolverá un iterador que apunta a la posición del par cuyo primer valor es mayor o igual a x .
Si los primeros valores son iguales, devolverá un iterador que apunta a la posición del par cuyo segundo valor es mayor o igual a y .
Si no se cumplen los criterios mencionados anteriormente, devuelve un iterador que apunta al final del conjunto (junto al último par del conjunto).

Sintaxis: hay dos formas de usar lower_bound():

setName.lower_bound({a, b})

límite_inferior(establecerNombre.begin(), establecerNombre.end(), par(a, b))

upper_bound() devuelve un iterador que apunta al primer elemento en el rango [first, last) que tiene un valor mayor que el valor dado «val» . Pero en el conjunto de Pares upper_bound() para par (x, y) devolverá un iterador que apunta a la posición del par cuyo primer valor es mayor que x .
Si los primeros valores son iguales, devolverá un iterador que apunta a la posición del par cuyo segundo valor es mayor que y .
Si no se cumplen los criterios mencionados anteriormente, devuelve un iterador que apunta al final del conjunto (junto al último par del conjunto).

Sintaxis: hay dos formas de usar upper_bound() con Set:

establecerNombre.superior_límite({a, b})

límite_superior(establecerNombre.begin(), establecerNombre.end(), par(a, b))

A continuación se muestra el programa para demostrar lower_bound() y upper_bound() en un conjunto de pares :

// C++ program to demonstrate lower_bound()
// and upper_bound() in set of Pairs
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to implement lower_bound()
void findLowerBound(
    set<pair<int, int> >& arr,
    pair<int, int>& p)
{
  
    // Given iterator points to the
    // lower_bound() of given pair
    auto low = lower_bound(arr.begin(),
                           arr.end(), p);
  
    cout << "lower_bound() for {1, 2}"
         << " is: {" << (*low).first << ", "
         << (*low).second << "}" << endl;
}
  
// Function to implement upper_bound()
void findUpperBound(
    set<pair<int, int> >& arr,
    pair<int, int>& p)
{
  
    // Given iterator points to the
    // lower_bound() of given pair
    auto up = upper_bound(arr.begin(),
                          arr.end(), p);
  
    cout << "upper_bound() for {1, 2}"
         << " is: {" << (*up).first << ", "
         << (*up).second << "}" << endl;
}
  
// Driver Code
int main()
{
  
    // Given sorted vector of Pairs
    set<pair<int, int> > s;
  
    // Insert pairs in set
    s.insert(make_pair(1, 2));
    s.insert(make_pair(2, 4));
    s.insert(make_pair(3, 7));
    s.insert(make_pair(8, 9));
  
    // Given pair { 1, 2 }
    pair<int, int> p = { 1, 2 };
  
    // Function Call to find lower_bound
    // of pair p in arr
    findLowerBound(s, p);
  
    // Function Call to find upper_bound
    // of pair p in arr
    findUpperBound(s, p);
  
    return 0;
}
Producción:

lower_bound() for {1, 2} is: {1, 2}
upper_bound() for {1, 2} is: {2, 4}

Publicación traducida automáticamente

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