函数模板
<algorithm>

std::minmax

默认 (1)
template <class T>  pair <const T&,const T&> minmax (const T& a, const T& b);
自定义 (2)
template <class T, class Compare>  pair <const T&,const T&> minmax (const T& a, const T& b, Compare comp);
初始化列表 (3)
template <class T>  pair<T,T> minmax (initializer_list<T> il);template <class T, class Compare>  pair<T,T> minmax (initializer_list<T> il, Compare comp);
默认 (1)
template <class T>  constexpr pair <const T&,const T&> minmax (const T& a, const T& b);
自定义 (2)
template <class T, class Compare>  constexpr pair <const T&,const T&> minmax (const T& a, const T& b, Compare comp);
初始化列表 (3)
template <class T>  constexpr pair<T,T> minmax (initializer_list<T> il);template <class T, class Compare>  constexpr pair<T,T> minmax (initializer_list<T> il, Compare comp);
返回最小和最大的元素
返回一个pair,其第一个元素是 ab 中较小的一个,第二个元素是它们中较大的一个。如果两者相等,则函数返回make_pair(a,b)

针对初始化列表 (3) 的版本返回一个pair,其第一个元素是列表中所有元素中最小的(如果存在多个,则为第一个),第二个元素是最大的(如果存在多个,则为最后一个)。

该函数使用operator<(如果提供了 comp,则使用 comp)来比较这些值。

此函数模板(版本(1))的行为等同于
1
2
3
template <class T> pair <const T&,const T&> minmax (const T& a, const T& b) {
  return (b<a) ? std::make_pair(b,a) : std::make_pair(a,b);
}

参数

a, b
要比较的值。
comp
二元函数,接受两个 T 类型的参数,并返回一个可转换为 bool 的值。返回的值表示第一个参数中的元素是否被认为小于第二个参数。
该函数不得修改其任何参数。
这可以是一个函数指针,也可以是一个函数对象。
il
il
这些对象是从初始化列表声明符自动构造的。

T 应支持与 operator< 的比较。
对于(3)T 应为拷贝构造

返回值

所传入参数中较小的那个值。

示例

1
2
3
4
5
6
7
8
9
10
11
// minmax example
#include <iostream>     // std::cout
#include <algorithm>    // std::minmax

int main () {
  auto result = std::minmax({1,2,3,4,5});

  std::cout << "minmax({1,2,3,4,5}): ";
  std::cout << result.first << ' ' << result.second << '\n';
  return 0;
}

输出
minmax({1,2,3,4,5}): 1 5


复杂度

最多为比较元素数量的线性一次半倍(对于(1)(2) 为常量)。

异常

如果任何比较操作抛出异常,则该函数抛出异常。
请注意,无效参数会导致未定义行为

另见