Bibliothèque d'algorithmes C ++ - Fonction is_heap_until ()

La description

La fonction C ++ std::algorithm::is_heap_until()trouve le premier élément de la séquence qui enfreint la condition de tas max. Il utilise une fonction binaire pour la comparaison.

Déclaration

Voici la déclaration de la fonction std :: algorithm :: is_heap_until () de l'en-tête std :: algorithme.

C ++ 11

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

Paramètres

  • first - Itérateur à accès aléatoire à la position initiale.

  • last - Itérateur d'accès aléatoire à la position finale.

  • comp - Une fonction binaire qui accepte deux arguments et retourne bool.

Valeur de retour

Renvoie un itérateur vers le premier élément qui viole la condition de tas max. Si la séquence entière est un tas max valide, elle retourne en dernier .

Exceptions

Lève une exception si la comparaison d'éléments ou une opération sur un itérateur lève une exception.

Veuillez noter que des paramètres non valides provoquent un comportement non défini.

Complexité temporelle

Linéaire.

Exemple

L'exemple suivant montre l'utilisation de la fonction std :: algorithm :: 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;
}

Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant -

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