sort_heap
Converte um heap em um intervalo classificado.
template<class RandomAccessIterator>
void sort_heap(
RandomAccessIterator _First,
RandomAccessIterator _Last
);
template<class RandomAccessIterator, class Predicate>
void sort_heap(
RandomAccessIterator _First,
RandomAccessIterator _Last,
Predicate _Comp
);
Parâmetros
_First
Um iterador de acesso aleatório que trata a posição do primeiro elemento no heap de destino._Last
Um iterador de acesso aleatório que trata a posição uma após o elemento final no heap de destino._Comp
Objeto definido pelo usuário da função de predicado em que define o sentido que o elemento é menor do que outros.Um predicado binário leva dois argumentos e retorna true quando satisfeito e false quando não satisfeito.
Comentários
Os heaps têm duas propriedades:
O primeiro elemento é sempre maior.
Elementos podem ser adicionados ou removidos. momento logarítmicas
Após o aplicativo se esse algoritmo, o intervalo ele foi aplicado a ele não é mais um heap.
Este é um tipo não estável porque a ordem relativo de elementos equivalentes não necessariamente é preservada.
Os heaps são um meio ideal para implementar filas de prioridade e são usados na implementação do adaptador padrão classe de priority_queuedo contêiner de biblioteca do modelo.
o intervalo referenciado deve ser válido; todos os ponteiros devem ser dereferenceable e na seqüência a posição da última é alcançável de primeira por incrementação.
Complexidade é o máximo Emo log de Em , onde N = (_Last – _First).
Exemplo
// alg_sort_heap.cpp
// compile with: /EHsc
#include <algorithm>
#include <functional>
#include <iostream>
#include <ostream>
#include <string>
#include <vector>
using namespace std;
void print(const string& s, const vector<int>& v) {
cout << s << ": ( ";
for (auto i = v.begin(); i != v.end(); ++i) {
cout << *i << " ";
}
cout << ")" << endl;
}
int main() {
vector<int> v;
for (int i = 1; i <= 9; ++i) {
v.push_back(i);
}
print("Initially", v);
random_shuffle(v.begin(), v.end());
print("After random_shuffle", v);
make_heap(v.begin(), v.end());
print(" After make_heap", v);
sort_heap(v.begin(), v.end());
print(" After sort_heap", v);
random_shuffle(v.begin(), v.end());
print(" After random_shuffle", v);
make_heap(v.begin(), v.end(), greater<int>());
print("After make_heap with greater<int>", v);
sort_heap(v.begin(), v.end(), greater<int>());
print("After sort_heap with greater<int>", v);
}
A saída de exemplo
Initially: ( 1 2 3 4 5 6 7 8 9 )
After random_shuffle: ( 9 2 7 3 1 6 8 4 5 )
After make_heap: ( 9 5 8 4 1 6 7 2 3 )
After sort_heap: ( 1 2 3 4 5 6 7 8 9 )
After random_shuffle: ( 5 8 3 1 2 9 7 6 4 )
After make_heap with greater<int>: ( 1 2 3 4 5 9 7 6 8 )
After sort_heap with greater<int>: ( 9 8 7 6 5 4 3 2 1 )
Requisitos
Cabeçalho: <algorithm>
namespace: STD