Namensräume
Varianten
Aktionen

std::ranges::max_element

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
Minimum/Maximum-Operationen
max_element
       
       
Permutationsoperationen
Faltoperationen
Operationen auf uninitialisiertem Speicher
Rückgabetypen
 
Definiert in Header <algorithm>
Aufruf-Signatur
template< std::forward_iterator I, std::sentinel_for<I> S, class Proj = std::identity,

          std::indirect_strict_weak_order<std::projected<I, Proj>> Comp = ranges::less >
constexpr I

    max_element( I first, S last, Comp comp = {}, Proj proj = {} );
(1) (seit C++20)
template< ranges::forward_range R, class Proj = std::identity,

          std::indirect_strict_weak_order<
              std::projected<ranges::iterator_t<R>, Proj>> Comp = ranges::less >
constexpr ranges::borrowed_iterator_t<R>

    max_element( R&& r, Comp comp = {}, Proj proj = {} );
(2) (seit C++20)
1) Findet das größte Element im Bereich [firstlast).
2) Dasselbe wie (1), aber verwendet r als Quellbereich, als ob ranges::begin(r) als first und ranges::end(r) als last verwendet würden.

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 Bereich der zu untersuchenden Elemente definiert
r - Der zu untersuchende Bereich
comp - Vergleich, der auf die projizierten Elemente angewendet wird
proj - Projektion, die auf die Elemente angewendet wird

[bearbeiten] Rückgabewert

Iterator auf das größte Element im Bereich [firstlast). Wenn mehrere Elemente im Bereich gleich dem größten Element sind, wird der Iterator auf das erste solche Element zurückgegeben. Gibt last zurück, wenn der Bereich leer ist (d. h. wenn first == last).

[bearbeiten] Komplexität

Genau max(N - 1, 0) Vergleiche, wobei N = ranges::distance(first, last).

[bearbeiten] Mögliche Implementierung

struct max_element_fn
{
    template<std::forward_iterator I, std::sentinel_for<I> S, class Proj = std::identity,
             std::indirect_strict_weak_order<std::projected<I, Proj>> Comp = ranges::less>
    constexpr I operator()(I first, S last, Comp comp = {}, Proj proj = {}) const
    {
        if (first == last)
            return last;
 
        auto largest = first;
        while (++first != last)
            if (std::invoke(comp, std::invoke(proj, *largest), std::invoke(proj, *first)))
                largest = first;
        return largest;
    }
 
    template<ranges::forward_range R, class Proj = std::identity,
             std::indirect_strict_weak_order<
                 std::projected<ranges::iterator_t<R>, Proj>> Comp = ranges::less>
    constexpr ranges::borrowed_iterator_t<R>
        operator()(R&& r, Comp comp = {}, Proj proj = {}) const
    {
        return (*this)(ranges::begin(r), ranges::end(r), std::ref(comp), std::ref(proj));
    }
};
 
inline constexpr max_element_fn max_element;

[bearbeiten] Beispiel

#include <algorithm>
#include <cmath>
#include <iostream>
 
int main()
{
    namespace ranges = std::ranges;
 
    const auto v = {3, 1, -14, 1, 5, 9, -14, 9};
 
    auto result = ranges::max_element(v.begin(), v.end());
    std::cout << "Max element at pos " << ranges::distance(v.begin(), result) << '\n';
 
    auto abs_compare = [](int a, int b) { return std::abs(a) < std::abs(b); };
    result = ranges::max_element(v, abs_compare);
    std::cout << "Absolute max element at pos "
              << ranges::distance(v.begin(), result) << '\n';
}

Ausgabe

Max element at pos 5
Absolute max element at pos 2

[bearbeiten] Siehe auch

gibt das kleinste Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)[bearbeiten]
gibt das kleinste und das größte Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt)[bearbeiten]
Gibt den größeren der beiden Werte zurück
(Algorithmus-Funktionsobjekt)[edit]
Gibt das größte Element in einem Bereich zurück
(Funktionstemplate) [edit]