merge

Führt alle Elemente aus zwei sortierten Quellbereichen in einem einzelnen, sortierten Zielbereich, in dem Sortierkriterium möglicherweise durch ein binäres Prädikat angegeben wird.

template<class InputIterator1, class InputIterator2, class OutputIterator>
   OutputIterator merge(
      InputIterator1 _First1, 
      InputIterator1 _Last1,
      InputIterator2 _First2, 
      InputIterator2 _Last2, 
      OutputIterator _Result
   );
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>
   OutputIterator merge(
      InputIterator1 _First1, 
      InputIterator1 _Last1,
      InputIterator2 _First2, 
      InputIterator2 _Last2, 
      OutputIterator _Result
      BinaryPredicate _Comp
   );

Parameter

  • _First1
    Ein Eingabeiterator, der die Position des ersten Elements in der ersten von zwei sortierte behandelt, die kombiniert werden Quellbereiche, und sortierte in einen einzelnen Bereich.

  • _Last1
    Ein Eingabeiterator, der die Position eine hinter dem letzten Element in der ersten von zwei sortierte behandelt, die kombiniert werden Quellbereiche, und sortierte in einen einzelnen Bereich.

  • _First2
    Ein Eingabeiterator, der die Position des ersten Elements in zweiter von zwei aufeinander sortierten Quellbereichen behandelt kombiniert werden und in einen einzelnen Bereich sortiert wurden.

  • _Last2
    Ein Eingabeiterator, der die Position eine hinter dem letzten Element in zweiter von zwei aufeinander sortierten Quellbereichen behandelt kombiniert werden und in einen einzelnen Bereich sortiert wurden.

  • _Result
    Ein Ausgabeiterator, der die Position des ersten Elements im Zielbereich abweicht, in der die zwei Quellbereiche in einen einzelnen sortierten Bereich kombiniert werden sollen.

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, dem dem Sinne definiert, in dem ein Element größer als andere.Das binäre Prädikat verwendet zwei Argumente und sollte true , wenn das erste Element kleiner als ist, das zweite Element und false andernfalls zurückgeben.

Rückgabewert

Ein Ausgabeiterator, der die Position eine hinter dem letzten Element im sortierten Zielbereich behandelt.

Hinweise

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.

Der Zielbereich sollte nicht von den Quellbereichen auch nicht überschneiden und sollte so groß sein, den Zielbereich enthalten soll.

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

Der Vorgang ist stabil, da die relative Reihenfolge der Elemente innerhalb eines Bereichs im Zielbereich beibehalten wird.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.Wenn es entsprechende Elemente in beiden Quellbereichen gibt, wechseln die Elemente im ersten Bereich Elementen aus dem zweiten Quellbereich im Zielbereich voran.

Die Komplexität des Algorithmus ist mit höchstens linear (_Last1 - _First1) - (_Last2 - _First2) - 1 Vergleiche.

Die Klasse stellt Liste eine Memberfunktion Zusammenführung, um die Elemente aus zwei Listen zusammenzuführen.

merge hat zwei verknüpfte Formulare:

checked_merge

unchecked_merge

Informationen darüber, wie diese Funktionen verhalten, finden Sie unter Überprüfte Iteratoren.

Beispiel

// alg_merge.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, v1 ( 12 );
   vector <int>::iterator Iter1a,  Iter1b, Iter1;

   // Constructing vector v1a and v1b with default less than ordering
   int i;
   for ( i = 0 ; i <= 5 ; i++ )
      v1a.push_back(  i );

   int ii;
   for ( ii =-5 ; ii <= 0 ; 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 vector v2 with ranges sorted by greater
   vector <int> v2a ( v1a ) , v2b ( v1b ) ,  v2 ( v1 );
   vector <int>::iterator Iter2a,  Iter2b, Iter2;
   sort ( v2a.begin ( ) , v2a.end ( ) , greater<int> ( ) );
   sort ( v2b.begin ( ) , v2b.end ( ) , greater<int> ( ) );

   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 vector v3 with ranges sorted by mod_lesser
   vector <int> v3a ( v1a ), v3b ( v1b ) ,  v3 ( v1 );
   vector <int>::iterator Iter3a,  Iter3b, Iter3;
   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 merge inplace in ascending order with default binary 
   // predicate less <int> ( )
   merge ( v1a.begin ( ) , v1a.end ( ) , v1b.begin ( ) , v1b.end ( ) , v1.begin ( ) );
   cout << "Merged inplace with default order,\n vector v1mod =  ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // To merge inplace in descending order, specify binary 
   // predicate greater<int>( )
   merge ( v2a.begin ( ) , v2a.end ( ) , v2b.begin ( ) , v2b.end ( ) ,
       v2.begin ( ) ,  greater <int> ( ) );
   cout << "Merged inplace with binary predicate greater specified,\n "
        << "vector v2mod  = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")." << endl;

   // Applying A user-defined (UD) binary predicate mod_lesser
   merge ( v3a.begin ( ) , v3a.end ( ) , v3b.begin ( ) , v3b.end ( ) ,
       v3.begin ( ) ,  mod_lesser );
   cout << "Merged inplace with binary predicate mod_lesser specified,\n "
        << "vector v3mod  = ( " ; ;
   for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
      cout << *Iter3 << " ";
   cout << ")." << endl;
}

Output

Original vector v1a with range sorted by the
 binary predicate less than is  v1a = ( 0 1 2 3 4 5 ).
Original vector v1b with range sorted by the
 binary predicate less than is  v1b = ( -5 -4 -3 -2 -1 0 ).
Original vector v2a with range sorted by the
 binary predicate greater is   v2a =  ( 5 4 3 2 1 0 ).
Original vector v2b with range sorted by the
 binary predicate greater is   v2b =  ( 0 -1 -2 -3 -4 -5 ).
Original vector v3a with range sorted by the
 binary predicate mod_lesser is   v3a =  ( 0 1 2 3 4 5 ).
Original vector v3b with range sorted by the
 binary predicate mod_lesser is   v3b =  ( 0 -1 -2 -3 -4 -5 ).
Merged inplace with default order,
 vector v1mod =  ( -5 -4 -3 -2 -1 0 0 1 2 3 4 5 ).
Merged inplace with binary predicate greater specified,
 vector v2mod  = ( 5 4 3 2 1 0 0 -1 -2 -3 -4 -5 ).
Merged inplace with binary predicate mod_lesser specified,
 vector v3mod  = ( 0 0 1 -1 2 -2 3 -3 4 -4 5 -5 ).

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

merge (STL Samples)

Predicate Version of merge

Standardvorlagenbibliothek