merge ile sıralı olan iki dizi yeni bir dizi olarak birleştirilir. Yani merge sort (birleştirmeli sıralama) yapılır. std::merge yerine std::map kendi merge() metodunu sunuyor.
Örnek
a ve b veriyapıları c içinde birleştirmek için şöyle yaparız
Klasik array kullanılacaksa nihai dizinin yeterince büyük olması gerekir. Örnekte nihai dizi için 100 elemanlık yer ayrılıyor.
std::array kullanılsa da nihai dizi için 100 elemanlık yer ayrılıyor.
Java'da pseudo kod için buraya bakılabilir. C ile verilen bir örnek
Örnek
a ve b veriyapıları c içinde birleştirmek için şöyle yaparız
decltype(a) c;
std::merge(a.begin(), a.end(),
b.begin(), b.end(),
std::back_inserter(c));
ÖrnekKlasik array kullanılacaksa nihai dizinin yeterince büyük olması gerekir. Örnekte nihai dizi için 100 elemanlık yer ayrılıyor.
int A[50];
int B[50];
int C[100];
std::merge(std::begin(A), std::end(A), std::begin(B), std::end(B), std::begin(C));
Örnekstd::array kullanılsa da nihai dizi için 100 elemanlık yer ayrılıyor.
std::array<int, 50> A;
std::array<int, 50> B;
std::array<int, 100> C;
std::merge(A.begin(), A.end(), B.begin(), B.end(), C.begin());
ÖrnekJava'da pseudo kod için buraya bakılabilir. C ile verilen bir örnek
void merge(int **a, int **b, int **c)
{
while(*a || *b)
*c++ = !*a || *b && **b < **a
? *b++
: *a++;
}
merge - yanlış kullanımEğer kullanılan veri yapısı elemanları sıralı saklamıyorsa std::merge yapmanın bir anlamı yoktur. Elimizde 3 tane unordered_map olsun.
unordered_map<int,int> map1 ,map2, map3;
map1 ve map2'yi map3'te şöyle birleştirebiliriz.map<int,int>::iterator it = map3.begin();
std::merge(map1.begin(),map1.end(),map2.begin(),map2.end(),inserter(map3,it));
Ancak unordered_map zaten sırasız olduğu için sonuç anlamsızdır.
Hiç yorum yok:
Yorum Gönder