Freigeben über


includes

Testet, ob ein sortierter Bereich alle Elemente enthält, die sofort enthalten sind, sortierte Bereich, in dem das Reihenfolge oder Äquivalenzkriterium möglicherweise zwischen Elementen durch ein binäres Prädikat angegeben wird.

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 abweicht, 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 abweicht, 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 zweiter von zwei aufeinander sortierten Quellbereichen abweicht, 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 zweiter von zwei aufeinander sortierten Quellbereichen abweicht, für getestet werden, ob alle Elemente des zweiten im ersten enthalten sind.

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, dem Sinne definiert, in dem ein Element kleiner als andere.Ein binäres Prädikat verwendet zwei Argumente und gibt zurück, wenn true erfüllt und false, wenn 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 Möglichkeit, an diesen Test ist zu beachten, dass es bestimmte, ob der zweite Quellbereich eine Teilmenge des ersten Quellbereichs ist.

Die sortierten Quellbereiche, auf die verwiesen wird, müssen gültig sein, alle Zeiger müssen dereferenzierbar sein und, innerhalb jeder Sequenz, muss die letzte Position von der ersten durch Zunahme erreichbar sein.

Die sortierten Quellbereiche müssen jedes angeordnet werden, während eine Vorbedingung zur Verwendung des Algorithmus in Übereinstimmung mit der Reihenfolge enthält, wie, durch den Algorithmus verwendet werden, um das Sortieren der kombinierten Bereiche ist.

Die Quellbereiche werden nicht durch den Algorithmus merge geändert.

Die Werttypen der Eingabeiteratoren müssen weniger-als vergleichbar sein, sortiert werden, sodass, zwei Elemente angegeben wurde, es jedem bestimmt werden kann, dass sie äquivalent sind (insofern, dass kein kleiner ist als die andere ist), oder dass ein kleiner als das andere ist.Dies ergibt eine Reihenfolge zwischen den antivalenten Elementen.Genauer gesagt, überprüft der Algorithmus, ob alle Elemente im ersten sortierten Bereich unter einem angegebenen binären Prädikat entsprechende Reihenfolge auf die im zweiten sortierten Bereich haben.

Die Komplexität des Algorithmus ist mit höchstens 2 linear * ((_Last1 - _First1) - (_Last2 - _First2)) - Vergleiche 1 für 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;
}
  
  
  
  
  
  
  
  
  

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

includes (STL Samples)

Predicate Version of includes

Standardvorlagenbibliothek