GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::partition_point(3) C++ Standard Libary std::ranges::partition_point(3)

std::ranges::partition_point - std::ranges::partition_point


Defined in header <algorithm>
Call signature
template< std::forward_iterator I, std::sentinel_for<I> S,


class Proj = std::identity,
std::indirect_unary_predicate<std::projected<I, Proj>> Pred > (1) (since C++20)
constexpr I


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


class Proj = std::identity,
std::indirect_unary_predicate< (2) (since C++20)
std::projected<ranges::iterator_t<R>, Proj>> Pred >
constexpr ranges::borrowed_iterator_t<R>


partition_point( R&& r, Pred pred, Proj proj = {} );


Examines the partitioned (as if by ranges::partition) range [first, last) or r and
locates the end of the first partition, that is, the projected element that does not
satisfy pred or last if all projected elements satisfy pred.


The function-like entities described on this page are niebloids, that is:


* Explicit template argument lists may not be specified when calling any of them.
* None of them is visible to argument-dependent lookup.
* When one of them is found by normal unqualified lookup for the name to the left
of the function-call operator, it inhibits argument-dependent lookup.


In practice, they may be implemented as function objects, or with special compiler
extensions.


first, last - iterator-sentinel defining the partially-ordered range to examine
r - the partially-ordered range to examine
pred - predicate to apply to the projected elements
proj - projection to apply to the elements


The iterator past the end of the first partition within [first, last) or the
iterator equal to last if all projected elements satisfy pred.


Given N = ranges::distance(first, last), performs O(log N) applications of the
predicate pred and projection proj.


However, if sentinels don't model std::sized_sentinel_for<I>, the number of iterator
increments is O(N).


This algorithm is a more general form of ranges::lower_bound, which can be expressed
in terms of ranges::partition_point with the predicate [&](auto const& e) { return
std::invoke(pred, e, value); });.

// Run this code


#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());
}


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


ranges::is_sorted checks whether a range is sorted into ascending order
(C++20) (niebloid)
ranges::lower_bound returns an iterator to the first element not less than the given
(C++20) value
(niebloid)
partition_point locates the partition point of a partitioned range
(C++11) (function template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.