函式模板
<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) 為常量)。

異常

如果任何比較操作丟擲異常,則該函式丟擲異常。
請注意,無效引數會導致未定義行為

另見