Namespaces
Variants

std::is_heap_until

De fr.cppreference.net
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur plages (C++20)
Algorithmes contraints, p. ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modifiantes    
Opérations par lots
(C++17)
Opérations de recherche
Opérations de séquence modifiantes
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Opérations de tri et connexes
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur plages partitionnées)
Opérations d'ensemble (sur plages triées)
Opérations de fusion (sur plages triées)
Opérations de tas
Opérations min/max
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 
Défini dans l'en-tête <algorithm>
template< class RandomIt >
RandomIt is_heap_until( RandomIt first, RandomIt last );
(1) (depuis C++11)
(constexpr depuis C++20)
template< class ExecutionPolicy, class RandomIt >
RandomIt is_heap_until( ExecutionPolicy&& policy,
                        RandomIt first, RandomIt last );
(2) (depuis C++17)
template< class RandomIt, class Compare >
RandomIt is_heap_until( RandomIt first, RandomIt last, Compare comp );
(3) (depuis C++11)
(constexpr depuis C++20)
template< class ExecutionPolicy, class RandomIt, class Compare >
RandomIt is_heap_until( ExecutionPolicy&& policy,
                        RandomIt first, RandomIt last, Compare comp );
(4) (depuis C++17)

Examine la plage [firstlast) et trouve la plus grande plage commençant à first qui soit un tas.

1) La propriété de tas à vérifier est par rapport à operator<(jusqu'à C++20)std::less{}(depuis C++20).
3) La propriété de tas à vérifier est par rapport à comp.
2,4) Identique à (1,3), mais exécuté selon policy.
Ces surcharges participent à la résolution de surcharge uniquement si la valeur de l'expression suivante est true :

std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>

(jusqu'à C++20)

std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>

(depuis C++20)

Paramètres

first, last - la paire d'itérateurs définissant la plage d'éléments à examiner
policy - la politique d'exécution à utiliser
comp - objet fonction de comparaison (c.-à-d. un objet satisfaisant aux exigences de Compare) qui retourne true si le premier argument est inférieur au second.

La signature de la fonction de comparaison doit être équivalente à ce qui suit :

bool cmp(const Type1& a, const Type2& b);

Bien que la signature n'ait pas besoin d'avoir const&, la fonction ne doit pas modifier les objets qui lui sont passés et doit pouvoir accepter toutes les valeurs de type (possiblement const) Type1 et Type2 quelle que soit la catégorie de valeur (ainsi, Type1& n'est pas autorisé, ni Type1 sauf si pour Type1 un déplacement est équivalent à une copie(depuis C++11)).
Les types Type1 et Type2 doivent être tels qu'un objet de type RandomIt puisse être déréférencé puis implicitement converti en chacun d'eux.

Exigences de type
-
RandomIt doit satisfaire aux exigences de LegacyRandomAccessIterator.
-
Compare doit satisfaire aux exigences de Compare.

Valeur de retour

Le dernier itérateur it pour lequel la plage [firstit) est un tas.

Complexité

Étant donné N comme std::distance(first, last) :

1,2) O(N) comparaisons utilisant operator<(jusqu'à C++20)std::less{}(depuis C++20).
3,4) O(N) applications de la fonction de comparaison comp.

Exceptions

Les surcharges avec un paramètre template nommé ExecutionPolicy signalent les erreurs comme suit :

  • Si l'exécution d'une fonction invoquée dans le cadre de l'algorithme lève une exception et que ExecutionPolicy fait partie des politiques standard, std::terminate est appelé. Pour tout autre ExecutionPolicy, le comportement est défini par l'implémentation.
  • Si l'algorithme ne parvient pas à allouer de la mémoire, std::bad_alloc est levé.

Exemple

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

int main()
{
    std::vector<int> v{3, 1, 4, 1, 5, 9};
    
    std::make_heap(v.begin(), v.end());
    
    // probably mess up the heap
    v.push_back(2);
    v.push_back(6);
    
    auto heap_end = std::is_heap_until(v.begin(), v.end());
    
    std::cout << "all of v:  ";
    for (const auto& i : v)
        std::cout << i << ' ';
    std::cout << '\n';
    
    std::cout << "only heap: ";
    for (auto i = v.begin(); i != heap_end; ++i)
        std::cout << *i << ' ';
    std::cout << '\n';
}

Sortie :

all of v:  9 5 4 1 1 3 2 6
only heap: 9 5 4 1 1 3 2

Voir aussi

(C++11)
vérifie si la plage donnée est un tas max
(modèle de fonction & objet fonction algorithme)
crée un tas max à partir d'une plage d'éléments
(modèle de fonction & objet fonction algorithme)
ajoute un élément à un tas max
(modèle de fonction & objet fonction algorithme)
supprime le plus grand élément d'un tas max
(modèle de fonction & objet fonction algorithme)
transforme un tas max en une plage d'éléments triés dans l'ordre croissant
(modèle de fonction & objet fonction algorithme)
trouve la plus grande sous-plage qui est un tas max
(objet fonction algorithme)