28 Algorithms library [algorithms]

28.7 Sorting and related operations [alg.sorting]

28.7.8 Minimum and maximum [alg.min.max]

template<class T> constexpr const T& min(const T& a, const T& b); template<class T, class Compare> constexpr const T& min(const T& a, const T& b, Compare comp);

Requires: Для первой формы типT должен быть LessThanComparable.

Returns: Меньшее значение.

Remarks: Возвращает первый аргумент, если аргументы эквивалентны.

Complexity: Ровно одно сравнение.

template<class T> constexpr T min(initializer_list<T> t); template<class T, class Compare> constexpr T min(initializer_list<T> t, Compare comp);

Requires:T должно бытьCopyConstructible иt.size() > 0. Для первой формы типT должен бытьLessThanComparable.

Returns: Наименьшее значение в initializer_list.

Remarks: Возвращает копию самого левого аргумента, если несколько аргументов эквивалентны наименьшему.

Complexity: Собственноt.size() - 1 сравнения.

template<class T> constexpr const T& max(const T& a, const T& b); template<class T, class Compare> constexpr const T& max(const T& a, const T& b, Compare comp);

Requires: Для первой формы типT должен быть LessThanComparable.

Returns: Большее значение.

Remarks: Возвращает первый аргумент, если аргументы эквивалентны.

Complexity: Ровно одно сравнение.

template<class T> constexpr T max(initializer_list<T> t); template<class T, class Compare> constexpr T max(initializer_list<T> t, Compare comp);

Requires:T должно бытьCopyConstructible иt.size() > 0. Для первой формы типT должен бытьLessThanComparable.

Returns: Наибольшее значение в initializer_list.

Remarks: Возвращает копию самого левого аргумента, если несколько аргументов эквивалентны самому большому.

Complexity: Собственноt.size() - 1 сравнения.

template<class T> constexpr pair<const T&, const T&> minmax(const T& a, const T& b); template<class T, class Compare> constexpr pair<const T&, const T&> minmax(const T& a, const T& b, Compare comp);

Requires: Для первой формы типT должен быть LessThanComparable.

Returns: pair<const T&, const T&>(b, a) еслиb меньшеa, и в pair<const T&, const T&>(a, b) противном случае.

Remarks: Возвращает,pair<const T&, const T&>(a, b) если аргументы эквивалентны.

Complexity: Ровно одно сравнение.

template<class T> constexpr pair<T, T> minmax(initializer_list<T> t); template<class T, class Compare> constexpr pair<T, T> minmax(initializer_list<T> t, Compare comp);

Requires:T должно бытьCopyConstructible иt.size() > 0. Для первой формы типT должен бытьLessThanComparable.

Returns:pair<T, T>(x, y), гдеx имеет наименьшее иy наибольшее значение в списке инициализаторов.

Remarks:x является копией самого левого аргумента, когда несколько аргументов эквивалентны наименьшему.y является копией самого правого аргумента, когда несколько аргументов эквивалентны самому большому.

Complexity: Максимум(3/2)t.size() применений соответствующего предиката.

template<class ForwardIterator> constexpr ForwardIterator min_element(ForwardIterator first, ForwardIterator last); template<class ExecutionPolicy, class ForwardIterator> ForwardIterator min_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last); template<class ForwardIterator, class Compare> constexpr ForwardIterator min_element(ForwardIterator first, ForwardIterator last, Compare comp); template<class ExecutionPolicy, class ForwardIterator, class Compare> ForwardIterator min_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);

Returns: Первый итератор i в диапазоне, [first, last) такой, что для каждого итератора j в диапазоне [first, last) выполняются следующие соответствующие условия: !(*j < *i) или comp(*j, *i) == false. Возвращает, last если first == last.

Complexity: Собственно max(last - first - 1,0) применения соответствующих сравнений.

template<class ForwardIterator> constexpr ForwardIterator max_element(ForwardIterator first, ForwardIterator last); template<class ExecutionPolicy, class ForwardIterator> ForwardIterator max_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last); template<class ForwardIterator, class Compare> constexpr ForwardIterator max_element(ForwardIterator first, ForwardIterator last, Compare comp); template<class ExecutionPolicy, class ForwardIterator, class Compare> ForwardIterator max_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);

Returns: Первый итератор i в диапазоне, [first, last) такой, что для каждого итератора j в диапазоне [first, last) выполняются следующие соответствующие условия: !(*i < *j) или comp(*i, *j) == false. Возвращает, last если first == last.

Complexity: Собственно max(last - first - 1,0) применения соответствующих сравнений.

template<class ForwardIterator> constexpr pair<ForwardIterator, ForwardIterator> minmax_element(ForwardIterator first, ForwardIterator last); template<class ExecutionPolicy, class ForwardIterator> pair<ForwardIterator, ForwardIterator> minmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last); template<class ForwardIterator, class Compare> constexpr pair<ForwardIterator, ForwardIterator> minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); template<class ExecutionPolicy, class ForwardIterator, class Compare> pair<ForwardIterator, ForwardIterator> minmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);

Returns: make_­pair(first, first) если[first, last) пусто, в противном случае make_­pair(m, M)гдеm - первый итератор в[first, last) таком, что ни один итератор в диапазоне не ссылается на меньший элемент, а гдеM - последний итератор266 в[first, last) таком, что ни один итератор в диапазоне не ссылается на больший элемент.

Complexity: В большинстве max(32(N1),0) случаев применения соответствующего предиката, гдеN естьlast - first.

Это поведение намеренно отличается отmax_­element().