GeezerVison is showing cpprefjp.github.io — std::ranges::max - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<algorithm>
std::ranges:: max (C++20)
namespace std :: ranges {
template < class T ,
class Proj = identity ,
indirect_strict_weak_order < projected < const T * , Proj >> Comp = ranges::less >
constexpr const T &
max ( const T & a ,
const T & b ,
Comp comp = {},
Proj proj = {}); // (1) C++20
template < copyable T ,
class Proj = identity ,
indirect_strict_weak_order < projected < const T * , Proj >> Comp = ranges::less >
constexpr T
max ( initializer_list < T > r ,
Comp comp = {},
Proj proj = {}); // (2) C++20
template < input_range R ,
class Proj = identity ,
indirect_strict_weak_order < projected < iterator_t < R > , Proj >> Comp = ranges::less >
requires indirectly_copyable_storable < iterator_t < R > , range_value_t < R >*>
constexpr range_value_t < R >
max ( R && r ,
Comp comp = {},
Proj proj = {}); // (3) C++20
template < execution-policy Ep ,
sized-random-access-range R ,
class Proj = identity ,
indirect_strict_weak_order < projected < iterator_t < R > , Proj >> Comp = ranges::less >
requires indirectly_copyable_storable < iterator_t < R > , range_value_t < R >*>
range_value_t < R >
max ( Ep && exec ,
R && r ,
Comp comp = {},
Proj proj = {}); // (4) C++26
}
概要
同じ型の2つの値、もしくは範囲によるN個の値のうち、最大値を取得する。
(1): 2つの値を指定する
(2): 初期化子リストを指定する
(3): Rangeを指定する
(4): (3)の並列アルゴリズム版。実行ポリシーを指定する
戻り値
比較 invoke (comp, invoke (proj, *i), invoke (proj, *j)) によって最大と判断された最初の値
備考
等価な要素が 2 つ以上あった場合には、最も左の要素を返す。
例
基本的な使い方
#include <array>
#include <algorithm>
#include <functional>
int main ()
{
constexpr int result1 = std::ranges::max ( 2 , 3 );
static_assert ( result1 == 3 );
constexpr int result2 = std::ranges::max ( 2 , 3 , std::ranges::greater ());
static_assert ( result2 == 2 );
constexpr int result3 = std::ranges::max ({ 1 , 2 , 3 });
static_assert ( result3 == 3 );
constexpr std::array < int , 3 > a = { 1 , 2 , 3 };
constexpr int result4 = std::ranges::max ( a , std::ranges::greater ());
static_assert ( result4 == 1 );
}
出力
備考
Windows環境においては、<windows.h>をインクルードするとmaxという名前の関数マクロが定義され、std::ranges::max()と衝突してしまうという問題がある。
この解決策として以下の2つの方法がある:
<windows.h>をインクルードするまでに#define NOMINMAXを行う。これでmaxマクロが定義されなくなる。
std::ranges::max()を呼び出す際に、(std::ranges::max)(a, b);のように関数名をカッコで囲んで使用する。これで、名前解決においてstd::ranges::max()関数が必ず使用される。
並列アルゴリズムの例 (C++26)
出力
9
バージョン
言語
処理系
参照