Namespaces
Variants

std::ranges:: partition_point

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:: forward_iterator I, std:: sentinel_for < I > S,

class Proj = std:: identity ,
std:: indirect_unary_predicate < std :: projected < I, Proj >> Pred >
constexpr I

partition_point ( I first, S last, Pred pred, Proj proj = { } ) ;
(1) (seit C++20)
template < ranges:: forward_range R,

class Proj = std:: identity ,
std:: indirect_unary_predicate <
std :: projected < ranges:: iterator_t < R > , Proj >> Pred >
constexpr ranges:: borrowed_iterator_t < R >

partition_point ( R && r, Pred pred, Proj proj = { } ) ;
(2) (seit C++20)

Untersucht den partitionierten (als ob durch ranges::partition ) Bereich [ first , last ) oder r und ermittelt das Ende der ersten Partition, das heißt das projizierte Element, das pred nicht erfüllt, oder last falls alle projizierten Elemente pred erfüllen.

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 teilweise geordneten Bereich der zu untersuchenden Elemente definiert
r - der teilweise geordnete Bereich, der untersucht werden soll
pred - Prädikat, das auf die projizierten Elemente angewendet wird
proj - Projektion, die auf die Elemente angewendet wird

Rückgabewert

Der Iterator nach dem Ende der ersten Partition innerhalb [ first , last ) oder der Iterator gleich last falls alle projizierten Elemente pred erfüllen.

Komplexität

Bei gegebenem N = ranges:: distance ( first, last ) führt O(log N) Anwendungen des Prädikats pred und der Projektion proj durch.

Wenn Sentinels jedoch nicht std:: sized_sentinel_for < I > modellieren, ist die Anzahl der Iterator-Inkremente O(N) .

Hinweise

Dieser Algorithmus ist eine allgemeinere Form von ranges::lower_bound , der mithilfe von ranges::partition_point mit dem Prädikat [ & ] ( auto const & e ) { return std:: invoke ( pred, e, value ) ; } ) ; ausgedrückt werden kann.

Beispiel

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
auto print_seq = [](auto rem, auto first, auto last)
{
    for (std::cout << rem; first != last; std::cout << *first++ << ' ') {}
    std::cout << '\n';
};
int main()
{
    std::array v {1, 2, 3, 4, 5, 6, 7, 8, 9};
    auto is_even = [](int i) { return i % 2 == 0; };
    std::ranges::partition(v, is_even);
    print_seq("Nach Partitionierung, v: ", v.cbegin(), v.cend());
    const auto pp = std::ranges::partition_point(v, is_even);
    const auto i = std::ranges::distance(v.cbegin(), pp);
    std::cout << "Partitionspunkt ist bei " << i << "; v[" << i << "] = " << *pp << '\n';
    print_seq("Erste Partition (alle geraden Elemente): ", v.cbegin(), pp);
    print_seq("Zweite Partition (alle ungeraden Elemente): ", pp, v.cend());
}

Mögliche Ausgabe:

Nach Partitionierung, v: 2 4 6 8 5 3 7 1 9
Partitionspunkt ist bei 4; v[4] = 5
Erste Partition (alle geraden Elemente): 2 4 6 8
Zweite Partition (alle ungeraden Elemente): 5 3 7 1 9

Siehe auch

prüft, ob ein Bereich in aufsteigender Reihenfolge sortiert ist
(Algorithmus-Funktionsobjekt)
gibt einen Iterator zum ersten Element zurück, das nicht kleiner als der gegebene Wert ist
(Algorithmus-Funktionsobjekt)
ermittelt den Partitionierungspunkt eines partitionierten Bereichs
(Funktions-Template)