std::experimental::ranges:: equal
|
template
<
InputIterator I1, Sentinel
<
I1
>
S1, InputIterator I2, Sentinel
<
I2
>
S2,
class
Pred
=
ranges::
equal_to
<>
,
|
(1) | (ranges TS) |
|
template
<
InputRange R1, InputRange R2,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj1
=
ranges::
identity
,
class
Proj2
=
ranges::
identity
>
|
(2) | (ranges TS) |
|
template
<
InputIterator I1, Sentinel
<
I1
>
S1,
class
I2,
class
Pred
=
ranges::
equal_to
<>
,
|
(3) |
(ranges TS)
(已弃用) |
|
template
<
InputRange R1,
class
I2,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj1
=
ranges::
identity
,
class
Proj2
=
ranges::
identity
>
|
(4) |
(ranges TS)
(已弃用) |
[
first1
,
last1
)
等于范围
[
first2
,
last2
)
则返回
true
,否则返回
false
。
两个范围被视为相等,当且仅当它们具有相同数量的元素,并且对于范围
[
first1
,
last1
)
中的每个迭代器
i
,
ranges::
invoke
(
pred,
ranges::
invoke
(
proj1,
*
i
)
,
ranges::
invoke
(
proj2,
*
(
first2
+
(
i
-
first1
)
)
)
)
的结果为
true
。
尽管存在上述声明,算法声明的实际模板参数数量和顺序是未指定的。因此,若在调用算法时使用了显式模板参数,该程序很可能不具备可移植性。
目录 |
参数
| first1, last1 | - | 元素的第一范围 |
| r1 | - | 元素的第一范围 |
| first2, last2 | - | 元素的第二范围 |
| r2 | - | 元素的第二范围 |
| first2_ | - | 元素第二范围的起始位置 |
| pred | - | 应用于投影元素的谓词 |
| proj1 | - | 应用于第一范围元素的投影 |
| proj2 | - | 应用于第二范围元素的投影 |
返回值
true 如果两个范围相等,否则返回 false 。
注释
ranges::equal
不应用于比较由
std::unordered_set
、
std::unordered_multiset
、
std::unordered_map
或
std::unordered_multimap
的迭代器形成的范围,因为即使两个容器存储相同的元素,这些容器中元素的存储顺序也可能不同。
在比较整个容器是否相等时,通常推荐使用对应容器的
operator==
运算符。
复杂度
可能的实现
namespace detail { template<InputIterator I1, SizedSentinel<I1> S1, InputIterator I2, SizedSentinel<I1> S2> bool check_size(I1& first1, S1& last1, I2& first2, S2& last2) { return last1 - first1 != last2 - first2; } template<InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I1> S2> bool check_size(I1& first1, S1& last1, I2& first2, S2& last2) { return false; } } template<InputIterator I1, Sentinel<I1> S1, InputIterator 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 equal(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{}) { if (detail::check_size(first1, last1, first2, last2)) return false; for (; first1 != last1 && first2 != last2; (void) ++first1, (void)++first2) if (!ranges::invoke(pred, ranges::invoke(proj1, *first1), ranges::invoke(proj2, *first2))) return false; return first1 == last1 && first2 == last2; } |
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
判断两组元素是否相同
(函数模板) |
|
|
查找首个满足特定条件的元素
(函数模板) |
|
|
若一个范围按字典序小于另一个范围则返回
true
(函数模板) |
|
|
查找两个范围首次出现差异的位置
(函数模板) |
|
|
搜索一个元素范围
(函数模板) |