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
µÑ ´Ù ¿øº»ÀÌ °°±â ¶§¹®¿¡ º´ÇÕÇÑ °á°úµµ °°´Ù.