std::experimental::ranges:: search
|
ヘッダーで定義
<experimental/ranges/algorithm>
|
||
|
template
<
ForwardIterator I1, Sentinel
<
I1
>
S1,
ForwardIterator I2, Sentinel
<
I2
>
S2,
class
Pred
=
ranges::
equal_to
<>
,
|
(1) | (ranges TS) |
|
template
<
ForwardRange R1, ForwardRange R2,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj1
=
ranges::
identity
,
class
Proj2
=
ranges::
identity
>
|
(2) | (ranges TS) |
[
first1
,
last1
)
内で、要素シーケンス
[
first2
,
last2
)
の最初の出現を検索します。要素はそれぞれ
proj2
と
proj1
で投影された後、
pred
を使用して比較されます。
上記に示された宣言にかかわらず、アルゴリズム宣言の実際のテンプレートパラメータの数と順序は未規定です。したがって、アルゴリズムを呼び出す際に明示的なテンプレート引数を使用する場合、プログラムはおそらく移植性がありません。
目次 |
パラメータ
| first1, last1 | - | 検査対象の要素範囲 |
| r1 | - | 検査対象の要素範囲 |
| first2, last2 | - | 検索対象の要素範囲 |
| r2 | - | 検索対象の要素範囲 |
| pred | - | 投影された要素に適用する述語 |
| proj1 | - | 第1範囲の要素に適用する投影 |
| proj2 | - | 第2範囲の要素に適用する投影 |
戻り値
範囲
[
first1
,
last1
)
内で最初に現れるシーケンス
[
first2
,
last2
)
の先頭を指すイテレータ。
[
first2
,
last2
)
が空の場合、
first1
が返される。該当するシーケンスが見つからない場合、
last1
と等価なイテレータが返される。
計算量
最大で
S * N
回の述語および各射影の適用、ここで
S
=
last2
-
first2
かつ
N
=
last1
-
first1
である。
実装例
template<ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2, class Pred = ranges::equal_to<>, class Proj1 = ranges::identity, class Proj2 = ranges::identity> requires IndirectlyComparable<I1, I2, Pred, Proj1, Proj2> I1 search(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{}) { for (; ; ++first1) { I1 it = first1; for (I2 it2 = first2; ; (void)++it, (void)++it2) { if (it2 == last2) return first1; if (it == last1) return it; if (!ranges::invoke(pred, ranges::invoke(proj1, *it), ranges::invoke(proj2, *it2))) break; } } } |
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
要素の範囲の最初の出現を検索する
(関数テンプレート) |
|
|
特定の範囲内の最後の要素シーケンスを検索する
(関数テンプレート) |
|
|
一方の集合が他方の部分集合である場合に
true
を返す
(関数テンプレート) |
|
|
2つの要素集合が同じかどうかを判定する
(関数テンプレート) |
|
|
特定の条件を満たす最初の要素を検索する
(関数テンプレート) |
|
|
一方の範囲が他方よりも辞書順で小さい場合に
true
を返す
(関数テンプレート) |
|
|
2つの範囲が最初に異なる位置を検索する
(関数テンプレート) |
|
|
範囲内の要素の連続するコピーを検索する
(関数テンプレート) |