std::experimental::ranges:: equal
|
Definiert im Header
<experimental/ranges/algorithm>
|
||
|
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)
(veraltet) |
|
template
<
InputRange R1,
class
I2,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj1
=
ranges::
identity
,
class
Proj2
=
ranges::
identity
>
|
(4) |
(ranges TS)
(veraltet) |
[
first1
,
last1
)
gleich dem Bereich
[
first2
,
last2
)
ist, andernfalls
false
.
Zwei Bereiche werden als gleich betrachtet, wenn sie die gleiche Anzahl an Elementen haben und für jeden Iterator
i
im Bereich
[
first1
,
last1
)
,
ranges::
invoke
(
pred,
ranges::
invoke
(
proj1,
*
i
)
,
ranges::
invoke
(
proj2,
*
(
first2
+
(
i
-
first1
)
)
)
)
true
ist.
Ungeachtet der oben dargestellten Deklarationen sind die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Daher ist das Programm wahrscheinlich nicht portabel, wenn explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden.
Inhaltsverzeichnis |
Parameter
| first1, last1 | - | der erste Bereich der Elemente |
| r1 | - | der erste Bereich der Elemente |
| first2, last2 | - | der zweite Bereich der Elemente |
| r2 | - | der zweite Bereich der Elemente |
| first2_ | - | der Anfang des zweiten Bereichs der Elemente |
| pred | - | Prädikat, das auf die projizierten Elemente angewendet wird |
| proj1 | - | Projektion, die auf die Elemente im ersten Bereich angewendet wird |
| proj2 | - | Projektion, die auf die Elemente im zweiten Bereich angewendet wird |
Rückgabewert
true wenn die beiden Bereiche gleich sind, andernfalls wird false zurückgegeben.
Hinweise
ranges::equal
sollte nicht verwendet werden, um die Bereiche zu vergleichen, die von den Iteratoren aus
std::unordered_set
,
std::unordered_multiset
,
std::unordered_map
oder
std::unordered_multimap
gebildet werden, da die Reihenfolge, in der die Elemente in diesen Containern gespeichert sind, unterschiedlich sein kann, selbst wenn beide Container dieselben Elemente speichern.
Beim Vergleich gesamter Container auf Gleichheit,
operator==
für den entsprechenden Container werden normalerweise bevorzugt.
Komplexität
Mögliche Implementierung
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; } |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
bestimmt, ob zwei Elementgruppen identisch sind
(Funktions-Template) |
|
|
findet das erste Element, das bestimmte Kriterien erfüllt
(Funktions-Template) |
|
|
gibt
true
zurück, falls ein Bereich lexikographisch kleiner als ein anderer ist
(Funktions-Template) |
|
|
findet die erste Position, an der zwei Bereiche sich unterscheiden
(Funktions-Template) |
|
|
sucht nach einem Bereich von Elementen
(Funktions-Template) |