std::ranges::pop_heap
| 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 > |
(1) | (seit C++20) |
| template< ranges::random_access_range R, class Comp = ranges::less, class Proj = std::identity > |
(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.
[first, last).Die auf dieser Seite beschriebenen funktionsähnlichen Entitäten sind Algorithmus-Funktionsobjekte (informell als niebloids bekannt), d.h.
- Können explizite Template-Argumentlisten bei keinem von ihnen angegeben werden.
- Keiner von ihnen ist für Argument-abhängige Suche sichtbar.
- Wenn einer von ihnen durch normale unqualifizierte Suche als Name links vom Funktionsaufrufoperator gefunden wird, wird die Argument-abhängige Suche unterdrückt.
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
[bearbeiten] Komplexität
Höchstens 2log(N) Anwendungen von comp und 4log(N) Anwendungen von proj, wobei N
[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
| (C++20) |
Fügt ein Element zu einem Max-Heap hinzu (Algorithmus-Funktionsobjekt) |
| (C++20) |
Prüft, ob der gegebene Bereich ein Max-Heap ist (Algorithmus-Funktionsobjekt) |
| (C++20) |
Findet den größten Teilbereich, der ein Max-Heap ist (Algorithmus-Funktionsobjekt) |
| (C++20) |
Erstellt aus einem Bereich von Elementen einen Max-Heap (Algorithmus-Funktionsobjekt) |
| (C++20) |
Verwandelt einen Max-Heap in einen aufsteigend sortierten Bereich von Elementen (Algorithmus-Funktionsobjekt) |
| Entfernt das größte Element aus einem Max-Heap (Funktionstemplate) |