GeezerVison is showing cpprefjp.github.io — std::ranges::contains - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<algorithm>
std::ranges:: contains (C++23)
namespace std :: ranges {
template < input_iterator I ,
sentinel_for < I > S ,
class T ,
class Proj = identity >
requires indirect_binary_predicate <
ranges::equal_to ,
projected < I , Proj > ,
const T *
>
constexpr bool
contains ( I first ,
S last ,
const T & value ,
Proj proj = {}); // (1) C++23
template < input_iterator I ,
sentinel_for < I > S ,
class Proj = identity ,
class T = projected_value_t < I , Proj >>
requires indirect_binary_predicate <
ranges::equal_to ,
projected < I , Proj > ,
const T *
>
constexpr bool
contains ( I first ,
S last ,
const T & value ,
Proj proj = {}); // (1) C++26
template < input_range R ,
class T ,
class Proj = identity >
requires indirect_binary_predicate <
ranges::equal_to ,
projected < iterator_t < R > , Proj > ,
const T *
>
constexpr bool
contains ( R && r ,
const T & value ,
Proj proj = {}); // (2) C++23
template < input_range R ,
class Proj = identity ,
class T = projected_value_t < iterator_t < R > , Proj >>
requires indirect_binary_predicate <
ranges::equal_to ,
projected < iterator_t < R > , Proj > ,
const T *
>
constexpr bool
contains ( R && r ,
const T & value ,
Proj proj = {}); // (2) C++26
template < execution-policy Ep ,
random_access_iterator I ,
sized_sentinel_for < I > S ,
class Proj = identity ,
class T = projected_value_t < I , Proj >>
requires indirect_binary_predicate <
ranges::equal_to ,
projected < I , Proj > ,
const T *
>
bool
contains ( Ep && exec ,
I first ,
S last ,
const T & value ,
Proj proj = {}); // (3) C++26
template < execution-policy Ep ,
sized-random-access-range R ,
class Proj = identity ,
class T = projected_value_t < iterator_t < R > , Proj >>
requires indirect_binary_predicate <
ranges::equal_to ,
projected < iterator_t < R > , Proj > ,
const T *
>
bool
contains ( Ep && exec ,
R && r ,
const T & value ,
Proj proj = {}); // (4) C++26
}
概要
指定された値が含まれるか調べる。
(1): イテレータ範囲を指定する
(2): Rangeを直接指定する
(3): (1)の並列アルゴリズム版。実行ポリシーを指定する
(4): (2)の並列アルゴリズム版。実行ポリシーを指定する
戻り値
計算量
最大で last - first 回比較を行う
備考
(1), (2) :
C++26 : 引数として波カッコ初期化{}を受け付ける
std::vector < T > v ;
bool found = std :: ranges :: contains ( r , { a , b });
例
基本的な使い方
出力
found
波カッコ初期化を入力として使用する (C++26)
#include <algorithm>
#include <print>
#include <vector>
struct Point {
int x ;
int y ;
bool operator == ( const Point & other ) const = default ;
};
int main () {
std::vector < Point > v = {
{ 1 , 2 },
{ 3 , 4 },
{ 5 , 6 }
};
bool found = std::ranges::contains ( v , { 3 , 4 });
if ( found ) {
std::println ( "found" );
} else {
std::println ( "not found" );
}
}
出力
found
並列アルゴリズムの例 (C++26)
出力
true
実装例
struct contains_impl {
template < input_iterator I , sentinel_for < I > S , class T , class Proj = identity >
requires indirect_binary_predicate < ranges::equal_to , projected < I , Proj > , const T *>
constexpr bool operator ()( I first , S last , const T & value , Proj proj = {}) const {
return ranges::find ( std :: move ( first ), last , value , proj ) != last ;
}
template < input_range R , class T , class Proj = identity >
requires indirect_binary_predicate < ranges::equal_to , projected < iterator_t < R > , Proj > , const T *>
constexpr bool operator ()( R && r , const T & value , Proj proj = {}) const {
return ( * this )( begin ( r ), end ( r ), value , ref ( proj ));
}
};
inline constexpr contains_impl contains ;
バージョン
言語
処理系
参照