最終更新日時(UTC):
が更新

履歴 編集

function template
<algorithm>

std::ranges::min_max_result(C++20)

namespace std::ranges {
  // (1)
  template<class T>
  struct min_max_result {
    [[no_unique_address]] T min;
    [[no_unique_address]] T max;

    template<class T2>
      requires convertible_to<const T&, T2>
    constexpr operator min_max_result<T2>() const & {
      return {min, max};
    }

    template<class T2>
      requires convertible_to<T, T2>
    constexpr operator min_max_result<T2>() && {
      return {std::move(min), std::move(max)};
    }
  };

  // (2)
  template<class T>
  using minmax_result = min_max_result<T>;

  // (3)
  template<class I>
  using minmax_element_result = min_max_result<I>;
}

概要

  • (1): 最小値と最大値、またはそれらのイテレータを格納する型
  • (2): ranges::minmaxで使用するエイリアス
  • (3): ranges::minmax_elementで使用するエイリアス

この型は、関数が最小値と最大値またはそれらのイテレータを返す場合に使用される。

標準アルゴリズム関数ではこの型を直接返す代わりに、関数毎にエイリアスを定義している。

メンバ変数

名前 説明 対応バージョン
[[no_unique_address]] T min 最小値、または最小値を表すイテレータ C++20
[[no_unique_address]] T max 最大値、または最大値を表すイテレータ C++20

メンバ関数

名前 説明 対応バージョン
operator min_max_result<T2> 変換演算子 C++20

変換演算子は、各テンプレートパラメーターが変換できる場合のみオーバーロード解決に参加する。

#include <cassert>
#include <algorithm>

int main()
{
  const std::ranges::min_max_result result = std::ranges::minmax({1, 2, 3});
  assert(result.min == 1 && result.max == 3);
}

出力

バージョン

言語

  • C++20

処理系

参照