includes
Veröffentlicht: Juli 2016
Testet, ob ein Bereich sortierter ganzen enthaltenden Elemente sofort sortierten Bereich enthält, in dem die Reihenfolge oder Äquivalenzkriterium Kleinschreibung zwischen Elementen durch ein binäres Prädikat angegeben wird.
Syntax
template<class InputIterator1, class InputIterator2>
bool includes(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
InputIterator2 _Last1
);
template<class InputIterator1, class InputIterator2, class BinaryPredicate>
bool includes(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
InputIterator2 _Last1,
BinaryPredicate _Comp
);
Parameter
_First1
Ein Eingabeiterator, der die Position des ersten Elements in der ersten von zwei anspricht, sortierte für die zu testenden Quellbereiche, ob alle Elemente des zweiten im ersten enthalten sind._Last1
Ein Eingabeiterator, der die Position eine hinter dem letzten Element in der ersten von zwei anspricht, sortierte für die zu testenden Quellbereiche, ob alle Elemente des zweiten im ersten enthalten sind._First2
Ein Eingabeiterator, der die Position des ersten Elements in zweiten von zwei aufeinander sortierten Quellbereichen behandelt, für getestet werden, ob alle Elemente des zweiten im ersten enthalten sind._Last2
Ein Eingabeiterator, der die Position eine hinter dem letzten Element in zweiten von zwei aufeinander sortierten Quellbereichen behandelt, für getestet werden, ob alle Elemente des zweiten im ersten enthalten sind._Comp
Benutzerdefiniertes Prädikatfunktionsobjekt, das den Sinn definiert, in dem ein Element kleiner als ein anderes ist. Ein binärer Prädikat akzeptiert zwei Argumente und gibt bei Erfüllung true zurück und false, wenn es nicht erfüllt wird.
Rückgabewert
true, wenn der zuerst sortierte Bereich alle Elemente im zweiten sortierten Bereich enthält; andernfalls false.
Hinweise
Eine andere Methode, an diesen Test zu durchdenken ist, da es bestimmte, dass der zweite Quellbereich eine Teilmenge des ersten Quellbereichs ist.
In sortierten Quellbereiche, auf die verwiesen wird, müssen gültig sein; alle Zeiger müssen dereferenzierbar sein, und in jeder Sequenz, muss die letzte Position der ersten von Zunahme erreichbar sein.
In sortierten Quellbereiche müssen jedes während eine Vorbedingung zur Verwendung der Algorithmuseinschließung mit derselben Reihenfolge angeordnet werden, z, den Algorithmus verwendet werden, um die kombinierte Bereiche zu sortieren ist.
Die Quellbereiche werden nicht durch den Algorithmus zusammenführen geändert.
Die Werttypen der Eingabeiteratoren müssen weniger-als sein, vergleichbar sortiert werden, sodass, zwei Elemente angegeben wurden, wird bestimmt werden kann jeder, ob sie äquivalent sind (im Sinne, dass nicht geringer als die andere ist), oder dass von kleiner als die andere. Dies führt zu einer Sortierung zwischen den nicht gleichwertigen Elementen. Genauer, überprüft der Algorithmus, ob alle Elemente im zuerst sortierten Bereich unter einem angegebenen Prädikat entsprechende binäre Reihenfolge an die sortierten im zweiten Bereich haben.
Die Komplexität des Algorithmus ist mit höchstens 2 linear * ((_Last1 - _First1) - (_Last2 - _First2)) - 1 für Vergleiche nicht leere Quellbereiche.
Beispiel
// alg_includes.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional> // For greater<int>( )
#include <iostream>
// Return whether modulus of elem1 is less than modulus of elem2
bool mod_lesser (int elem1, int elem2 )
{
if ( elem1 < 0 )
elem1 = - elem1;
if ( elem2 < 0 )
elem2 = - elem2;
return elem1 < elem2;
}
int main( )
{
using namespace std;
vector <int> v1a, v1b;
vector <int>::iterator Iter1a, Iter1b;
// Constructing vectors v1a & v1b with default less-than ordering
int i;
for ( i = -2 ; i <= 4 ; i++ )
{
v1a.push_back( i );
}
int ii;
for ( ii =-2 ; ii <= 3 ; ii++ )
{
v1b.push_back( ii );
}
cout << "Original vector v1a with range sorted by the\n "
<< "binary predicate less than is v1a = ( " ;
for ( Iter1a = v1a.begin( ) ; Iter1a != v1a.end( ) ; Iter1a++ )
cout << *Iter1a << " ";
cout << ")." << endl;
cout << "Original vector v1b with range sorted by the\n "
<< "binary predicate less than is v1b = ( " ;
for ( Iter1b = v1b.begin ( ) ; Iter1b != v1b.end ( ) ; Iter1b++ )
cout << *Iter1b << " ";
cout << ")." << endl;
// Constructing vectors v2a & v2b with ranges sorted by greater
vector <int> v2a ( v1a ) , v2b ( v1b );
vector <int>::iterator Iter2a, Iter2b;
sort ( v2a.begin ( ) , v2a.end ( ) , greater<int> ( ) );
sort ( v2b.begin ( ) , v2b.end ( ) , greater<int> ( ) );
v2a.pop_back ( );
cout << "Original vector v2a with range sorted by the\n "
<< "binary predicate greater is v2a = ( " ;
for ( Iter2a = v2a.begin ( ) ; Iter2a != v2a.end ( ) ; Iter2a++ )
cout << *Iter2a << " ";
cout << ")." << endl;
cout << "Original vector v2b with range sorted by the\n "
<< "binary predicate greater is v2b = ( " ;
for ( Iter2b = v2b.begin ( ) ; Iter2b != v2b.end ( ) ; Iter2b++ )
cout << *Iter2b << " ";
cout << ")." << endl;
// Constructing vectors v3a & v3b with ranges sorted by mod_lesser
vector <int> v3a ( v1a ), v3b ( v1b ) ;
vector <int>::iterator Iter3a, Iter3b;
reverse (v3a.begin( ), v3a.end( ) );
v3a.pop_back ( );
v3a.pop_back ( );
sort ( v3a.begin ( ) , v3a.end ( ) , mod_lesser );
sort ( v3b.begin ( ) , v3b.end ( ) , mod_lesser );
cout << "Original vector v3a with range sorted by the\n "
<< "binary predicate mod_lesser is v3a = ( " ;
for ( Iter3a = v3a.begin ( ) ; Iter3a != v3a.end ( ) ; Iter3a++ )
cout << *Iter3a << " ";
cout << ")." << endl;
cout << "Original vector v3b with range sorted by the\n "
<< "binary predicate mod_lesser is v3b = ( " ;
for ( Iter3b = v3b.begin ( ) ; Iter3b != v3b.end ( ) ; Iter3b++ )
cout << *Iter3b << " ";
cout << ")." << endl;
// To test for inclusion under an asscending order
// with the default binary predicate less <int> ( )
bool Result1;
Result1 = includes ( v1a.begin ( ) , v1a.end ( ) ,
v1b.begin ( ) , v1b.end ( ) );
if ( Result1 )
cout << "All the elements in vector v1b are "
<< "contained in vector v1a." << endl;
else
cout << "At least one of the elements in vector v1b "
<< "is not contained in vector v1a." << endl;
// To test for inclusion under descending
// order specify binary predicate greater<int>( )
bool Result2;
Result2 = includes ( v2a.begin ( ) , v2a.end ( ) ,
v2b.begin ( ) , v2b.end ( ) , greater <int> ( ) );
if ( Result2 )
cout << "All the elements in vector v2b are "
<< "contained in vector v2a." << endl;
else
cout << "At least one of the elements in vector v2b "
<< "is not contained in vector v2a." << endl;
// To test for inclusion under a user
// defined binary predicate mod_lesser
bool Result3;
Result3 = includes ( v3a.begin ( ) , v3a.end ( ) ,
v3b.begin ( ) , v3b.end ( ) , mod_lesser );
if ( Result3 )
cout << "All the elements in vector v3b are "
<< "contained under mod_lesser in vector v3a."
<< endl;
else
cout << "At least one of the elements in vector v3b is "
<< " not contained under mod_lesser in vector v3a."
<< endl;
}
Erster Vektor v1a mit dem Bereich sortiert nach binärer Prädikat weniger, als v1a ist = (-2 -1 0 1 2 3 4). Erster Vektor v1b mit dem Bereich sortiert nach binärer Prädikat weniger, als v1b ist = (-2 -1 0 1 2 3). Erster Vektor v2a mit dem Bereich sortiert nach das größere binäre Prädikat ist v2a = (4 3 2 1 0 -1). Erster Vektor v2b mit dem Bereich sortiert nach das größere binäre Prädikat ist v2b = (3 2 1 0 -1 -2). Erster Vektor v3a mit dem Bereich sortiert nach mod_lesser des binären Prädikats ist v3a = (0 1 2 3 4). Erster Vektor v3b mit dem Bereich sortiert nach mod_lesser des binären Prädikats ist v3b = (0 -1 1 -2 2 3). Alle Elemente im v1b Vektor werden im v1a Vektor enthalten. Mindestens wird eines der Elemente im v2b Vektor nicht im v2a Vektor enthalten. Mindestens wird eines der Elemente im v3b Vektor nicht unter mod_lesser Vektor im v3a enthalten.
Anforderungen
Header: <algorithm>
Namespace: std
Siehe auch
includes (STL-Beispiele)
Prädikatversion von includes
Standard Template Library