Partager via


make_heap

Convertit les éléments d'une plage spécifiée dans un segment de mémoire dans lequel le premier élément est le plus élevé et pour laquelle un critère de tri peut être spécifié avec un attribut binaire.

template<class RandomAccessIterator> 
   void make_heap( 
      RandomAccessIterator _First,  
      RandomAccessIterator _Last 
   ); 
template<class RandomAccessIterator, class BinaryPredicate> 
   void make_heap( 
      RandomAccessIterator _First,  
      RandomAccessIterator _Last,
      BinaryPredicate _Comp 
   );

Paramètres

  • _First
    Un itérateur l'accès aléatoire adressage la position du premier élément dans la plage à convertir en un segment de mémoire.

  • _Last
    Un itérateur l'accès aléatoire adressage la position une après l'élément final dans la plage à convertir en un segment de mémoire.

  • _Comp
    Objet de fonction de prédicat défini par l'utilisateur qui définit le sens dans lequel un élément est inférieur à un autre. Un prédicat binaire a besoin de deux arguments. Il renvoie true lorsqu'il est satisfait et false dans le cas contraire.

Notes

Les segments ont deux propriétés :

  • Le premier élément est toujours le plus grand.

  • Les éléments peuvent être ajoutés ou supprimés dans les délais logarithmique.

Les segments constituent un moyen idéale pour implémenter des files d'attente à priorité déterminé et ils sont utilisés dans l'implémentation de l'adaptateur classe de priority_queuede conteneur Standard TEMPLATE Library.

La complexité un-à-un, exigeant 3 * (_Last – _First) les comparaisons.

Exemple

// alg_make_heap.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>

int main() {
   using namespace std;
   vector <int> v1, v2;
   vector <int>::iterator Iter1, Iter2;

   int i;
   for ( i = 0 ; i <= 9 ; i++ )
      v1.push_back( i );

   random_shuffle( v1.begin( ), v1.end( ) );

   cout << "Vector v1 is ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Make v1 a heap with default less than ordering
   make_heap ( v1.begin( ), v1.end( ) );
   cout << "The heaped version of vector v1 is ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Make v1 a heap with greater than ordering
   make_heap ( v1.begin( ), v1.end( ), greater<int>( ) );
   cout << "The greater-than heaped version of v1 is ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
}

Résultat de l'exemple

Vector v1 is ( 8 1 9 2 0 5 7 3 4 6 ).
The heaped version of vector v1 is ( 9 6 8 4 1 5 7 3 2 0 ).
The greater-than heaped version of v1 is ( 0 1 5 2 6 8 7 3 4 9 ).

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

tas

Bibliothèque STL (Standard Template Library)