std::experimental::ranges::is_permutation

来自cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
实验性
技术规范
文件系统库(文件系统 TS)
库基础(库基础 TS)
库基础 2(库基础 TS v2)
库基础 3(库基础 TS v3)
并行扩展(并行 TS)
并行扩展 2(并行 TS v2)
并发扩展(并发 TS)
并发扩展 2(并发 TS v2)
概念(概念 TS)
范围(范围 TS)
反射(反射 TS)
数学特殊函数(特殊函数 TR)
实验性非 TS 功能特性
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
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>
bool is_permutation( I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{},

                     Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(1) (范围 TS)
template< ForwardRange R1, ForwardRange R2, class Pred =ranges::equal_to<>,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity>
    requires IndirectlyComparable<ranges::iterator_t<R1>, ranges::iterator_t<R2>,
                                  Pred, Proj1, Proj2>
bool is_permutation( R1&& r1, R2&& r2, Pred pred = Pred{},

                     Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(2) (范围 TS)
template< ForwardIterator I1, Sentinel<I1> S1, class I2,

          class Pred =ranges::equal_to<>,
          class Proj1 =ranges::identity, class Proj2 =ranges::identity>
    requires ForwardIterator<std::decay_t<I2>>&&!Range<I2>&&
             IndirectlyComparable<I1, std::decay_t<I2>, Pred, Proj1, Proj2>
bool is_permutation( I1 first1, S1 last1, I2&& first2_, Pred pred = Pred{},

                     Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(3) (范围 TS)
(弃用)
template< ForwardRange R1, class I2, class Pred =ranges::equal_to<>,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity>
    requires ForwardIterator<std::decay_t<I2>>&&!Range<I2>&&
             IndirectlyComparable<ranges::iterator_t<R1>, std::decay_t<I2>, Pred, Proj1, Proj2>
bool is_permutation( R1&& r1, I2&& first2_, Pred pred = Pred{},

                     Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(4) (范围 TS)
(弃用)
1) 如果存在范围 [first1last1) 中各元素的一种排列,使其范围等于 [first2last2) 则返回 true,否则返回 false
2)(1) 相同,但用 r1 为第一源范围并用 r2 为第二源范围,如同以 ranges::begin(r1)first1,以 ranges::end(r1)last1,以 ranges::begin(r2)first2,并以 ranges::end(r2)last2
3)(1) 相同,但 first2 如同以 std::decay_t<I2> first2 =std::forward<I2>(first2_); 定义且 last2first2 +(last1 - first1)
4)(3) 相同,但用 r1 为第一源范围,如同以 ranges::begin(r1)first1 并以 ranges::end(r1)last1

如果两个范围具有相同的元素数量,并且对于范围 [first1last1) 中的每个迭代器 iranges::invoke(pred, ranges::invoke(proj1, *i), ranges::invoke(proj2, *(first2 +(i - first1))))true,则认为两范围相等。

尽管声明描述如上,算法声明的模板形参的实际数量和顺序是未指定的。从而若在调用算法时使用显式模板实参,则程序很可能不可移植。

目录

[编辑]参数

first1, last1 - 第一元素范围
r1 - 第一元素范围
first2, last2 - 第二元素范围
r2 - 第二元素范围
first2_ - 第二元素范围的开头
pred - 运用于投射后元素的谓词
proj1 - 运用于第一范围中元素的投射
proj2 - 运用于第二范围中元素的投射

[编辑]返回值

如果范围 [first1last1) 是范围 [first2last2) 的排列则为 true

[编辑]复杂度

最多 O(N2) 次运用谓词和各投射,或当两序列已经相等时恰好 N 次,其中 N = last1 - first1

However if SizedSentinel<S1, I1>&& SizedSentinel<S2, I2> is satisfied and last1 - first1 != last2 - first2, no applications of the predicate and projections are made.

[编辑]示例

[编辑]参阅

判断一个序列是否为另一个序列的排列
(函数模板)[编辑]
产生某个元素范围的按字典顺序的下一个较大的排列
(函数模板)[编辑]
产生某个元素范围的按字典顺序的下一个较小的排列
(函数模板)[编辑]
close