Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Se recomienda usar Visual Studio 2017

make_heap

 

Convierte elementos de un intervalo especificado en un montón en el que el primer elemento es el mayor y para el que se puede especificar un criterio de ordenación con un predicado binario.


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

_First

Un iterador de acceso aleatorio que direcciona la posición del primer elemento del intervalo que se va a convertirse en un montón.

_Last

Un iterador de acceso aleatorio que direcciona la posición uno después del último elemento del intervalo que se va a convertirse en un montón.

_Comp

Objeto de función de predicado definido por el usuario que define el sentido en el que un elemento es menor que otro. Un predicado binario toma dos argumentos y devuelve true si se cumplen y false si no se cumplen.

Montones tienen dos propiedades:

  • El primer elemento siempre es el mayor.

  • Los elementos pueden agregarse o quitarse en tiempo logarítmico.

Los montones son una forma ideal de implementar colas de prioridad y se utilizan en la implementación del adaptador de contenedor de biblioteca de plantillas estándar de priority_queue (clase).

La complejidad es lineal, que requieren 3 * (_Last – _First) comparaciones.

Ejemplo

// 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;
}

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 ).

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Mostrar: