std::experimental::ranges::is_permutation
| Defined in header <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) |
| template< ForwardIterator I1, Sentinel<I1> S1, class I2, class Pred = ranges::equal_to<>, |
(3) | (ranges TS) (非推奨) |
| template< ForwardRange R1, class I2, class Pred = ranges::equal_to<>, class Proj1 = ranges::identity, class Proj2 = ranges::identity > |
(4) | (ranges TS) (非推奨) |
[first1, last1) の要素の置換が存在し、それが range [first2, last2) と等しくなる場合は true を返し、そうでない場合は false を返します。2 つの range が等しいとみなされるのは、要素数が同じであり、range [first1, last1) 内のすべてのイテレータ i について、ranges::invoke(pred, ranges::invoke(proj1, *i), ranges::invoke(proj2, *(first2 + (i - first1)))) が true になるときです。
上記に示された宣言にもかかわらず、アルゴリズム宣言のテンプレートパラメータの実際の数と順序は未指定です。したがって、アルゴリズムを呼び出す際に明示的なテンプレート引数を使用すると、プログラムはおそらくポータブルではありません。
目次 |
[編集] Parameters
| first1, last1 | - | 要素の最初の範囲 |
| r1 | - | 要素の最初の範囲 |
| first2, last2 | - | 要素の 2 番目の範囲 |
| r2 | - | 要素の 2 番目の範囲 |
| first2_ | - | 要素の 2 番目の範囲の開始位置 |
| pred | - | 射影された要素に適用する述語 |
| proj1 | - | 最初の範囲の要素に適用する射影 |
| proj2 | - | 2番目の範囲の要素に適用する射影 |
[編集] Return value
range [first1, last1) が range [first2, last2) の置換である場合は true。
[編集] Complexity
述語と各射影の適用は最大 O(N2) 回、またはシーケンスが既に等しい場合はちょうど N 回です。N = last1 - first1。
ただし、SizedSentinel<S1, I1> && SizedSentinel<S2, I2> が満たされ、かつ last1 - first1 != last2 - first2 の場合、述語と射影の適用は行われません。
[編集] Example
| このセクションは未完成です 理由: 例がありません |
[編集] See also
| (C++11) |
あるシーケンスが別のシーケンスの順列であるかを判断する (関数テンプレート) |
| 要素の範囲の次に大きい辞書順の順列を生成する (function template) | |
| 要素の範囲の次に小さい辞書順の順列を生成する (function template) |