Namensräume
Varianten
Aktionen

std::ranges::pop_heap

Von cppreference.com
< cpp‎ | algorithm‎ | ranges
 
 
Algorithmenbibliothek
Beschränkte Algorithmen und Algorithmen für Bereiche (C++20)
Beschränkte Algorithmen, z.B. ranges::copy, ranges::sort, ...
Ausführungsrichtlinien (C++17)
Nicht-modifizierende Sequenzoperationen
Stapeloperationen
(C++17)
Suchoperationen
(C++11)                (C++11)(C++11)

Modifizierende Sequenzoperationen
Kopieroperationen
(C++11)
(C++11)
Tauschoperationen
Transformationsoperationen
Generierungsoperationen
Entfernungsoperationen
Ordnungsändernde Operationen
(bis C++17)(C++11)
(C++20)(C++20)
Stichprobenoperationen
(C++17)

Sortier- und verwandte Operationen
Partitionierungsoperationen
Sortieroperationen
Binäre Suchoperationen
(auf partitionierten Bereichen)
Mengenoperationen (auf sortierten Bereichen)
Zusammenführungsoperationen (auf sortierten Bereichen)
Heapoperationen
Minimum/Maximum-Operationen
(C++11)
(C++17)
Lexikographische Vergleichsoperationen
Permutationsoperationen
C-Bibliothek
Numerische Operationen
Operationen auf uninitialisiertem Speicher
 
Eingeschränkte Algorithmen
Alle Namen in diesem Menü gehören zum Namespace std::ranges
Nicht-modifizierende Sequenzoperationen
Modifizierende Sequenzoperationen
Partitionierungsoperationen
Sortieroperationen
Binäre Suchoperationen (auf sortierten Bereichen)
       
       
Mengenoperationen (auf sortierten Bereichen)
Heapoperationen
         
pop_heap
Minimum/Maximum-Operationen
       
       
Permutationsoperationen
Faltoperationen
Operationen auf uninitialisiertem Speicher
Rückgabetypen
 
Definiert in Header <algorithm>
Aufruf-Signatur
template< std::random_access_iterator I, std::sentinel_for<I> S,

          class Comp = ranges::less, class Proj = std::identity >
    erfordert std::sortable<I, Comp, Proj>

constexpr I pop_heap( I first, S last, Comp comp = {}, Proj proj = {} );
(1) (seit C++20)
template< ranges::random_access_range R,

          class Comp = ranges::less, class Proj = std::identity >
    erfordert std::sortable<ranges::iterator_t<R>, Comp, Proj>
constexpr ranges::borrowed_iterator_t<R>

    pop_heap( R&& r, Comp comp = {}, Proj proj = {} );
(2) (seit C++20)

Vertauscht das erste Element und das letzte Element des angegebenen Heaps bezüglich comp und proj und macht den Unterbereich, der die erste Position ausschließt, zu einem Heap bezüglich comp und proj. Dies hat den Effekt, das erste Element aus dem angegebenen Heap zu entfernen.

1) Der angegebene Heap ist [firstlast).
2) Der angegebene Heap ist r.

Die auf dieser Seite beschriebenen funktionsähnlichen Entitäten sind Algorithmus-Funktionsobjekte (informell als niebloids bekannt), d.h.

Inhalt

[bearbeiten] Parameter

first, last - das Iterator-Sentinel-Paar, das den zu modifizierenden Bereich definiert
r - Der Bereich der zu ändernden Elemente
comp - Comparator, der auf die projizierten Elemente angewendet werden soll
proj - Projektion, die auf die Elemente angewendet wird

[bearbeiten] Rückgabewert

1) last

[bearbeiten] Komplexität

Höchstens 2log(N) Anwendungen von comp und 4log(N) Anwendungen von proj, wobei N

1) ranges::distance(first, last)

[bearbeiten] Beispiel

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string_view>
 
template<class I = int*>
void print(std::string_view rem, I first = {}, I last = {},
           std::string_view term = "\n")
{
    for (std::cout << rem; first != last; ++first)
        std::cout << *first << ' ';
    std::cout << term;
}
 
int main()
{
    std::array v{3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
    print("initially, v: ", v.cbegin(), v.cend());
 
    std::ranges::make_heap(v);
    print("make_heap, v: ", v.cbegin(), v.cend());
 
    print("convert heap into sorted array:");
    for (auto n {std::ssize(v)}; n >= 0; --n)
    {
        std::ranges::pop_heap(v.begin(), v.begin() + n);
        print("[ ", v.cbegin(), v.cbegin() + n, "]  ");
        print("[ ", v.cbegin() + n, v.cend(), "]\n");
    }
}

Ausgabe

initially, v: 3 1 4 1 5 9 2 6 5 3
make_heap, v: 9 6 4 5 5 3 2 1 1 3
convert heap into sorted array:
[ 6 5 4 3 5 3 2 1 1 9 ]  [ ]
[ 5 5 4 3 1 3 2 1 6 ]  [ 9 ]
[ 5 3 4 1 1 3 2 5 ]  [ 6 9 ]
[ 4 3 3 1 1 2 5 ]  [ 5 6 9 ]
[ 3 2 3 1 1 4 ]  [ 5 5 6 9 ]
[ 3 2 1 1 3 ]  [ 4 5 5 6 9 ]
[ 2 1 1 3 ]  [ 3 4 5 5 6 9 ]
[ 1 1 2 ]  [ 3 3 4 5 5 6 9 ]
[ 1 1 ]  [ 2 3 3 4 5 5 6 9 ]
[ 1 ]  [ 1 2 3 3 4 5 5 6 9 ]
[ ]  [ 1 1 2 3 3 4 5 5 6 9 ]

[bearbeiten] Siehe auch

Fügt ein Element zu einem Max-Heap hinzu
(Algorithmus-Funktionsobjekt)[edit]
Prüft, ob der gegebene Bereich ein Max-Heap ist
(Algorithmus-Funktionsobjekt)[edit]
Findet den größten Teilbereich, der ein Max-Heap ist
(Algorithmus-Funktionsobjekt)[edit]
Erstellt aus einem Bereich von Elementen einen Max-Heap
(Algorithmus-Funktionsobjekt)[edit]
Verwandelt einen Max-Heap in einen aufsteigend sortierten Bereich von Elementen
(Algorithmus-Funktionsobjekt)[edit]
Entfernt das größte Element aus einem Max-Heap
(Funktionstemplate) [edit]