42-3-´Ù.merge

merge ÇÔ¼ö´Â µÎ ¹Ýº¹ÀÚ ±¸°£ÀÇ ¿ä¼Ò¸¦ º´ÇÕÇÑ´Ù. µÎ ±¸°£Àº Á¤·ÄµÇ¾î ÀÖ¾î¾ß Çϸç ÇÕÃÄÁø °á°úµµ Á¤·ÄµÈ´Ù. inplace_merge´Â ÇÑ ÄÁÅ×À̳ÊÀÇ Á¤·ÄµÈ µÎ ¿¬¼Ó ±¸°£À» ÇÕÃÄ ¿ø·¡ ±¸°£¿¡ ½á ³Ö´Â´Ù.

 

OutIt merge(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt result [, BinPred F]);

void inplace_merge(BiIt first, BiIt middle, BiIt last [, BinPred F]);

 

merge´Â first1 ~ last1 ±¸°£°ú first2 ~ last2 ±¸°£À» º´ÇÕÇÏ¿© result¿¡ ÀÛ¼ºÇÑ´Ù. result´Â µÎ ±¸°£À» ¸ðµÎ ¹ÞÀ» ¼ö ÀÖÀ»¸¸ÇÑ ÃæºÐÇÑ °ø°£À» È®º¸Çϰí Àֵ簡 ¾Æ´Ï¸é »ðÀÔ ¹Ýº¹ÀÚ¿©¾ß ÇÑ´Ù. inplace_merge´Â frist ~ middle°ú middle ~ last¸¦ º´ÇÕÇÏ¿© first ~ last ±¸°£À» ´Ù½Ã ÀÛ¼ºÇÑ´Ù. µÑ ´Ù ¾ÈÁ¤¼ºÀº ÀÖÀ¸¹Ç·Î µ¿µîÇÑ °ªÀÇ ¿ø·¡ ¼ø¼­°¡ À¯ÁöµÈ´Ù.

 

¿¹ Á¦ : merge

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";

      copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }

 

void main()

{

     int i;

     vector<int> vi1,vi2,vi3;

     for (i=1;i<5;i++) vi1.push_back(i);

     for (i=3;i<9;i++) vi2.push_back(i);

     merge(vi1.begin(),vi1.end(),vi2.begin(),vi2.end(),back_inserter(vi3));

     dump("merge",vi3);

 

     vector<int> vi4;

     for (i=1;i<5;i++) vi4.push_back(i);

     for (i=3;i<9;i++) vi4.push_back(i);

     inplace_merge(vi4.begin(),vi4.begin()+4,vi4.end());

     dump("inplace_merge",vi4);

}

 

1 ~ 4±îÁöÀÇ Á¤¼ö º¤ÅÍ¿Í 3 ~ 8±îÁöÀÇ Á¤·ÄµÈ µÎ º¤Å͸¦ º´ÇÕÇÏ¿© vi3 ºó º¤ÅÍ¿¡ »õ·Î ½á ³Ö¾úÀ¸¸ç vi4¿¡ ¿¬¼ÓµÈ ±¸°£À» ¸¸µé°í µÎ ±¸°£À» º´ÇÕÇØ º¸¾Ò´Ù.

 

merge       ==> 1 2 3 3 4 4 5 6 7 8

inplace_merge==> 1 2 3 3 4 4 5 6 7 8

 

µÑ ´Ù ¿øº»ÀÌ °°±â ¶§¹®¿¡ º´ÇÕÇÑ °á°úµµ °°´Ù.