Biblioteca de algoritmos C ++ - Función is_heap_until ()

Descripción

La función C ++ std::algorithm::is_heap_until()encuentra el primer elemento de la secuencia que viola la condición de montón máximo. Utiliza una función binaria para la comparación.

Declaración

A continuación se muestra la declaración de la función std :: algorítm :: is_heap_until () del encabezado std :: algorítmico.

C ++ 11

template <class RandomAccessIterator>
template <class RandomAccessIterator, class Compare>
RandomAccessIterator is_heap_until(RandomAccessIterator first,
   RandomAccessIterator last Compare comp);

Parámetros

  • first - Iterador de acceso aleatorio a la posición inicial.

  • last - Iterador de acceso aleatorio a la posición final.

  • comp - Una función binaria que acepta dos argumentos y devuelve bool.

Valor devuelto

Devuelve un iterador al primer elemento que viola la condición de montón máximo. Si la secuencia completa es un montón máximo válido, vuelve al final .

Excepciones

Lanza una excepción si la comparación de elementos o una operación en un iterador arroja una excepción.

Tenga en cuenta que los parámetros no válidos provocan un comportamiento indefinido.

Complejidad del tiempo

Lineal.

Ejemplo

El siguiente ejemplo muestra el uso de la función std :: algorítm :: is_heap_until ().

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool ignore_case(char a, char b) {
   return (tolower(a) == tolower(b));
}

int main(void) {
   vector<char> v = {'E', 'd', 'C', 'b', 'A'};
   auto result = is_heap_until(v.begin(), v.end());

   cout << char(*result) << " is the first element which "
        << "violates the max heap." << endl;

   v = {5, 4, 3, 2, 1};

   result = is_heap_until(v.begin(), v.end(), ignore_case);

   if (result == end(v))
      cout << "Entire range is valid heap." << endl;

   return 0;
}

Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

d is the first element which violates the max heap.
Entire range is valid heap.