Namespaces
Variants

std::ranges:: pop_heap

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types
Definiert im Header <algorithm>
Aufrufsignatur
template < std:: random_access_iterator I, std:: sentinel_for < I > S,

class Comp = ranges:: less , class Proj = std:: identity >
requires 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 >
requires 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)

Tauscht das erste Element und das letzte Element des angegebenen Heaps bezüglich comp und proj aus und macht den Bereich ohne die erste Position zu einem Heap bezüglich comp und proj . Dies hat den Effekt, dass das erste Element aus dem angegebenen Heap entfernt wird.

1) Der angegebene Heap ist [ first , last ) .
2) Der angegebene Heap ist r .

Die auf dieser Seite beschriebenen funktionsähnlichen Entitäten sind Algorithm Function Objects (informell bekannt als Niebloids ), das heißt:

Inhaltsverzeichnis

Parameter

first, last - das Iterator-Sentinel-Paar, das den Bereich der zu ändernden Elemente definiert
r - der range der zu ändernden Elemente
comp - Komparator, der auf die projizierten Elemente angewendet wird
proj - Projektion, die auf die Elemente angewendet wird

Rückgabewert

1) last

Komplexität

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

1) ranges:: distance ( first, last )

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 ]

Siehe auch

fügt ein Element zu einem Max-Heap hinzu
(Algorithmus-Funktionsobjekt)
prüft, ob der gegebene Bereich ein Max-Heap ist
(Algorithmus-Funktionsobjekt)
findet den größten Teilbereich, der ein Max-Heap ist
(Algorithmus-Funktionsobjekt)
erstellt einen Max-Heap aus einer Reihe von Elementen
(Algorithmus-Funktionsobjekt)
wandelt einen Max-Heap in eine aufsteigend sortierte Elementreihe um
(Algorithmus-Funktionsobjekt)
entfernt das größte Element aus einem Max-Heap
(Funktionstemplate)