Encontrar el piso y el techo de una array ordenada usando C++ STL

Dada una array ordenada, la tarea es encontrar el piso y el techo de números dados usando STL.
Ejemplos: 
 

Input: arr[] = {1, 2, 4, 7, 11, 12, 23, 30, 32},
       values[] = { 1, 3, 5, 7, 20, 24 }
Output: Floor Values: 1 2 4 7 12 23 
       Ceil values: 1 4 7 7 23 30 

En el caso de floor() : se usará el método lower_bound() os STL para encontrar el límite inferior. Esto devuelve un iterador que apunta al primer elemento en el rango [primero, último] que no se compara menos que el objetivo.
En el caso de ceil() : se usará el método upper_bound() os STL para encontrar el límite superior. Este método devuelve un iterador que apunta al primer elemento en el rango [primero, último] que compara más que un objetivo.
Implementación: 
 

CPP

// C++ program to find the floor and ceil
// of a given numbers in a sorted array
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find floor of list of
// values using lower_bound in STL
void printFloor(int arr[], int n1,
                int findFloor[], int n2)
{
    // Find and print the Floor Values
    int low;
 
    cout << "Floor : ";
    for (int i = 0; i < n2; i++) {
 
        low = (lower_bound(arr, arr + n1,
                           findFloor[i])
               - arr);
 
        if (arr[low] > findFloor[i])
            cout << arr[low - 1] << " ";
        else
            cout << arr[low] << " ";
    }
 
    cout << endl;
}
ceil
// Function to find Ceil of list of
// values using upper_bound in STL
void printCeil(int arr[], int n1,
               int findCeil[], int n2)
{
    // Find and print the Ceil Values
    int up;
    cout << "Ceil : ";
    for (int i = 0; i < n2; i++) {
 
        up = (upper_bound(arr, arr + n1,
                          findCeil[i])
              - arr);
 
        if (arr[up] > findCeil[i]
            && arr[up - 1] == findCeil[i]) {
            cout << arr[up - 1] << " ";
        }
        else
            cout << arr[up] << " ";
    }
    cout << endl;
}
 
// Driver code
int main()
{
    // Get the sorted array
    int arr[] = { 1, 2, 4, 7, 11, 12, 23, 30, 32 };
    int n1 = sizeof(arr) / sizeof(arr[0]);
 
    // Print Array
    cout << "Original Array: ";
    for (unsigned int i = 0; i < n1; i++)
        cout << " " << arr[i];
    cout << "\n";
 
    // Given values whose floor and ceil
    // values are needed to find
    int find[] = { 1, 3, 5, 7, 20, 24 };
    int n2 = sizeof(find) / sizeof(find[0]);
 
    // Print Values whose floor
    // and ceil is to be found
    cout << "Values: ";
    for (unsigned int i = 0; i < n2; i++)
        cout << find[i] << " ";
    cout << "\n";
 
    // Print Floor Values
    printFloor(arr, n1, find, n2);
 
    // Print Ceil Values
    printCeil(arr, n1, find, n2);
 
    return 0;
}

Publicación traducida automáticamente

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