41-1-¸¶.ÁýÇÕ ¿¬»ê

ÁýÇÕ ¿¬»ê ¾Ë°í¸®ÁòÀº ÇÕÁýÇÕ, ±³ÁýÇÕ, Â÷ÁýÇÕ, Æ÷ÇÔ ¿©ºÎ µîÀÇ ÁýÇÕ °ü·Ã ¿¬»ê ±â´ÉÀ» Á¦°øÇÑ´Ù. Àü¿ª ¾Ë°í¸®Áò ÇÔ¼öµéÀ̶ó ÀÓÀÇÀÇ ÄÁÅ×ÀÌ³Ê¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÁÖ·Î ¼Â°ú ÇÔ²² »ç¿ëµÇ¹Ç·Î ¿©±â¼­ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ´ÙÀ½ ´Ù¼¸ °¡ÁöÀÇ ÇÔ¼ö°¡ Á¦°øµÈ´Ù.

 

OutIt set_union(InIt1 first1,InIt1 llast1, InIt2 first2, InIt2 last2, OutIt result);

OutIt set_intersection (InIt1 first1,InIt1 llast1, InIt2 first2, InIt2 last2, OutIt result);

OutIt set_difference (InIt1 first1,InIt1 llast1, InIt2 first2, InIt2 last2, OutIt result);

OutIt set_sysmmetric_difference (InIt1 first1,InIt1 llast1, InIt2 first2, InIt2 last2, OutIt result);

bool includes (InIt1 first1,InIt1 llast1, InIt2 first2, InIt2 last2);

 

´ëÇ¥ÀûÀ¸·Î ÇÕÁýÇÕÀ» ±¸ÇÏ´Â set_union ÇÔ¼ö¿¡ ´ëÇØ¼­¸¸ ¾Ë¾Æº¸ÀÚ. ÀÌ ÇÔ¼ö´Â µÎ °³ÀÇ ¹Ýº¹ÀÚ ±¸°£ first1~last1, first2~last2¸¦ Àμö·Î Àü´Þ¹Þ¾Æ µÎ ±¸°£¿¡ ¼ÓÇÏ´Â ¿ä¼ÒµéÀ» Áߺ¹¾øÀÌ ÇÕÃļ­ result ¹Ýº¹ÀÚ À§Ä¡¿¡ ´ëÀÔÇÑ´Ù. ¿øº» ¹Ýº¹ÀÚ ±¸°£Àº ÀÔ·Â ¹Ýº¹ÀÚÀ̹ǷΠ²À ¼ÂÀÏ ÇÊ¿ä´Â ¾øÁö¸¸ È¿À²ÀûÀÎ ÇÕÁýÇÕ ¿¬»êÀ» À§ÇØ ¹Ýµå½Ã Á¤·ÄµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. Á¤·ÄµÈ º¤Åͳª ¸®½ºÆ®ÀÇ ±¸°£µµ ¿øº»À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

±¸ÇØÁø ÇÕÁýÇÕÀº result ¹Ýº¹ÀÚ°¡ ÁöÁ¤ÇÏ´Â À§Ä¡¿¡ Â÷·Ê´ë·Î ´ëÀԵǴµ¥ ÀÌ ¹Ýº¹ÀÚµµ Ãâ·Â ±â´É¸¸ Á¦°øÇÏ¸é µÇ¹Ç·Î ÀÓÀÇÀÇ ÄÁÅ×À̳ʿ¡ °á°ú¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù. À̶§ °á°ú¸¦ ´ëÀÔ¹ÞÀ» ÄÁÅ×À̳ʴ ¿¹»óµÇ´Â ÇÕÁýÇÕÀ» ÀúÀåÇÒ¸¸ÇÑ ÃæºÐÇÑ °ø°£À» È®º¸Çϰí ÀÖ¾î¾ß ÇÑ´Ù. ¾Æ´Ï¸é »ðÀÔ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ¿© ÀԷµǴµ¥·Î ÄÁÅ×À̳ÊÀÇ °ø°£À» ÀçÇÒ´çÇϵµ·Ï ÇÒ ¼ö Àִµ¥ ÁÖ·Î ³¡¿¡ »ðÀÔÇÏ´Â back_inserter°¡ »ç¿ëµÈ´Ù.

³ª¸ÓÁö ÇÔ¼öµéÀº ±³ÁýÇÕ, Â÷ÁýÇÕ, ´ëĪÀû Â÷ÁýÇÕÀ» ÀÛ¼ºÇÑ´Ù. ´ëĪÀû Â÷ÁýÇÕÀ̶õ ÇÑÂÊ ±¸°£¿¡¸¸ ÀÖ´Â ¿ä¼Ò·Î ±¸¼ºµÈ ÁýÇÕÀ» ÀǹÌÇÑ´Ù. includes ÇÔ¼ö´Â µÎ ¹Ýº¹ÀÚ ±¸°£ÀÌ Æ÷ÇÔ°ü°è¿¡ ÀÖ´ÂÁö¸¦ Á¶»çÇÏ¿© ÇÑ ÁýÇÕÀÌ ´Ù¸¥ ÁýÇÕÀÇ ºÎºÐÁýÇÕÀÎÁö¸¦ Á¡°ËÇÑ´Ù. ¸ðµç ÁýÇÕ ÇÔ¼öµéÀº ¸¶Áö¸· Àμö·Î ¿ä¼ÒÀÇ ´ë¼Ò °ü°è¸¦ ºñ±³ÇÏ´Â ÀÌÇ× Á¶°ÇÀÚ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¼öÇÐÀûÀ¸·Î ½¬¿î °³³äÀ̹ǷΠ¿¹Á¦¸¦ ÅëÇØ µ¿ÀÛÀ» È®ÀÎÇØ º¸ÀÚ.

 

¿¹ Á¦ : setfunction

#include <iostream>

#include <vector>

#include <set>

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

     int ar1[]={7,0,0,6,2,9,1,9,1,4,9,2,0};

     int ar2[]={9,1,7,6,0,0,4,0,5,1,8};

     set<int> s1;

     for (i=0;i<sizeof(ar1)/sizeof(ar1[0]);i++) {

          s1.insert(ar1[i]);

     }

     set<int> s2;

     for (i=0;i<sizeof(ar2)/sizeof(ar2[0]);i++) {

          s2.insert(ar2[i]);

     }

 

     vector<int> vu;

     set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(vu));

     dump("ÇÕÁýÇÕ", vu);

 

     vector<int> vi;

     set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(vi));

     dump("±³ÁýÇÕ", vi);

 

     vector<int> vd;

     set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(vd));

     dump("Â÷ÁýÇÕ", vd);

 

     vector<int> vd2;

     set_symmetric_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(vd2));

     dump("´ëĪÂ÷", vd2);

}

 

Á¤¼öµéÀÌ ¹«ÀÛÀ§·Î µé¾î ÀÖ´Â µÎ °³ÀÇ ¹è¿­·Î s1, s2 µÎ °³ÀÇ ¼ÂÀ» »ý¼ºÇߴµ¥ ¹è¿­ÀÇ Á¤¼öµéÀÌ Áߺ¹¾øÀÌ ¼Â¿¡ »ðÀ﵃ °ÍÀÌ´Ù. s1, s2¿¡ Æ÷ÇÔµÈ ¿ø¼Ò¿Í ÁýÇÕ °ü°è¸¦ ¹ê´ÙÀ̾î±×·¥À¸·Î ±×·Áº¸¸é ÁýÇÕ °ü°è°¡ ÇÑ ´«¿¡ ½Ã¿ø½º·´°Ô º¸ÀδÙ.

±×¸²¿¡ Ç¥½ÃµÈ ´ë·Î µÎ ÁýÇÕÀÇ ÇÕÁýÇÕ, ±³ÁýÇÕ µîÀ» º¤ÅÍ¿¡ ±¸Çß´Ù. »ðÀÔ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇßÀ¸¹Ç·Î °á°ú ÁýÇÕÀÌ ºó º¤ÅÍ¿¡ »ðÀ﵃ °ÍÀÌ´Ù. Ãâ·Â °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

ÇÕÁýÇÕ      ==> 0 1 2 4 5 6 7 8 9

±³ÁýÇÕ      ==> 0 1 4 6 7 9

Â÷ÁýÇÕ      ==> 2

´ëĪÂ÷      ==> 2 5 8

 

¹ê´ÙÀ̾î±×·¥¿¡ ÀÖ´Â ÁýÇÕÀÌ °¢°¢ÀÇ º¤ÅÍ¿¡ ±¸ÇØÁ³´Ù. ÁßÇб³ ¼öÁØÀÇ ÁýÇÕ °³³ä¸¸ ÀÖÀ¸¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Â ÇÔ¼öµéÀÌ´Ù.