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
Definido en el encabezado <algorithm>
Firma de llamada
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) (desde 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) (desde C++20)

Examina el rango particionado (como si fuera por ranges::partition ) [ first , last ) o r y localiza el final de la primera partición, es decir, el elemento proyectado que no satisface pred o last si todos los elementos proyectados satisfacen pred .

Las entidades similares a funciones descritas en esta página son algorithm function objects (conocidas informalmente como niebloids ), es decir:

Contenidos

Parámetros

first, last - el par iterador-centinela que define el rango parcialmente ordenado de elementos a examinar
r - el rango parcialmente ordenado a examinar
pred - predicado a aplicar a los elementos proyectados
proj - proyección a aplicar a los elementos

Valor de retorno

El iterador después del final de la primera partición dentro de [ first , last ) o el iterador igual a last si todos los elementos proyectados satisfacen pred .

Complejidad

Dado N = ranges:: distance ( first, last ) , realiza O(log N) aplicaciones del predicado pred y la proyección proj .

Sin embargo, si los centinelas no modelan std:: sized_sentinel_for < I > , el número de incrementos del iterador es O(N) .

Notas

Este algoritmo es una forma más general de ranges::lower_bound , que puede expresarse en términos de ranges::partition_point con el predicado [ & ] ( auto const & e ) { return std:: invoke ( pred, e, value ) ; } ) ; .

Ejemplo

#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("After partitioning, 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 << "Partition point is at " << i << "; v[" << i << "] = " << *pp << '\n';
    print_seq("First partition (all even elements): ", v.cbegin(), pp);
    print_seq("Second partition (all odd elements): ", pp, v.cend());
}

Salida posible:

After partitioning, v: 2 4 6 8 5 3 7 1 9
Partition point is at 4; v[4] = 5
First partition (all even elements): 2 4 6 8
Second partition (all odd elements): 5 3 7 1 9

Véase también

verifica si un rango está ordenado en orden ascendente
(objeto función de algoritmo)
devuelve un iterador al primer elemento no menor que el valor dado
(objeto función de algoritmo)
localiza el punto de partición de un rango particionado
(plantilla de función)