Aracılığıyla paylaş


merge

Sıralama ölçütü ikili bir yüklemi burada belirtilebilir sıralanmış, tek hedef aralığı, tüm öğelerin iki sıralı kaynak aralıklardaki birleştirir.

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
   );

Parametreler

  • _First1
    İlk öğenin konumunu birleştirilen ve tek bir hücre sıralanmış iki sıralanmış kaynak aralığı ilk adresleme giriş Yineleyici.

  • _Last1
    Bir giriş Yineleyici konumunu bir geçmiş son öğe ilk birleştirilmiş ve tek bir hücre sıralanmış iki sıralı kaynak aralığı adresleme.

  • _First2
    Birbirini izleyen iki saniye içinde ilk öğenin konumunu adresleme giriş Yineleyici birleştirilir ve tek bir hücre sıralanan için kaynak aralığı sıralanır.

  • _Last2
    Giriş Yineleyici konumu geçmişte adresleme birleştirilir ve tek bir hücre sıralanan için kaynak aralığı art arda iki saniye içinde son öğe sıralanmış.

  • _Result
    İki kaynak aralığı tek bir sıralanmış aralığı birleşik olduğu hedef aralıktaki ilk öğenin konumunu adresleme çıktı Yineleyici.

  • _Comp
    Bir öðe baþka birinden büyük anlamda tanımlayan kullanıcı tanımlı işlevin doðrulama nesnesi.İkili karşılaştırma iki baðýmsýz deðiþken alýr ve döndürmesi gerektiğini doğru ikinci öğe ilk öğe olduğunda küçüktür ve yanlış Aksi durumda.

Dönüş Değeri

Çıkış Yineleyici konumu sıralanmış hedef aralıktaki son öğe geçmiş adresleme.

Notlar

Başvurulan sıralanmış kaynak aralığı geçerli olması gerekir; Tüm işaretçiler dereferenceable ve her sıra içinde son konuma birinciden erişilebilmelidir tarafından incrementation.

Hedef aralık ya da kaynak aralıkları çakışmamalıdır ve hedef aralığın büyüklükte olmalıdır.

Sıralanmış kaynak aralığı her uygulama için bir önkoşul olarak düzenlenmelidir birleştirme uygun olarak aynı sıralama algoritmasıdır birleşik aralıkları sıralamak için algoritması tarafından kullanılacak.

Hedef aralığın her aralıktaki öğelerin göreli sırası korunur gibi kalıcı bir işlemdir.Kaynak aralığı algoritması tarafından değiştirilmeyen birleştirme.

Giriş Yineleyicilerde değer türlerinin küçük olması-sipariþ edilmesi daha karşılaştırılabilir, verilen iki öğe, böylece onu eşdeğer (içinde her ikisi de diğer küçüktür anlam) ya da diğer daha az olduğunu belirlenebilir.Bu bir nonequivalent öğeleri sıralamada sonuçlanır.Her iki kaynak aralıklardaki eşdeğer öğeler olduğunda ilk aralıktaki öğeleri hedef aralığın ikinci kaynak aralığındaki öğeleri koyun.

Algoritmanın karmaşıklığı en fazla olan doğrusal (_Last1 – _First1) – (_Last2 – _First2) – 1 karşılaştırmalar.

Listesi sınıfı, bir üye işlev sağlar birleştirme iki liste öğelerini birleştirmek için.

mergeiki ilişkili formlar:

checked_merge

unchecked_merge

Bu işlevler nasıl davranacağını hakkında bilgi için bkz: İşaretli Yineleyiciler.

Örnek

// 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;
}

Çıktı

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 ).

Gereksinimler

Başlık: <algorithm>

Namespace: std

Ayrıca bkz.

Başvuru

merge (STL Samples)

Predicate Version of merge

Standart Şablon Kütüphanesi