ÁýÇÕ ¿¬»ê ¾Ë°í¸®ÁòÀº ÇÕÁýÇÕ, ±³ÁýÇÕ, Â÷ÁýÇÕ, Æ÷ÇÔ ¿©ºÎ µîÀÇ ÁýÇÕ °ü·Ã ¿¬»ê ±â´ÉÀ» Á¦°øÇÑ´Ù. Àü¿ª ¾Ë°í¸®Áò ÇÔ¼öµéÀ̶ó ÀÓÀÇÀÇ ÄÁÅ×ÀÌ³Ê¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÁÖ·Î ¼Â°ú ÇÔ²² »ç¿ëµÇ¹Ç·Î ¿©±â¼ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ´ÙÀ½ ´Ù¼¸ °¡ÁöÀÇ ÇÔ¼ö°¡ Á¦°øµÈ´Ù.
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
¹ê´ÙÀ̾î±×·¥¿¡ ÀÖ´Â ÁýÇÕÀÌ °¢°¢ÀÇ º¤ÅÍ¿¡ ±¸ÇØÁ³´Ù. ÁßÇб³ ¼öÁØÀÇ ÁýÇÕ °³³ä¸¸ ÀÖÀ¸¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Â ÇÔ¼öµéÀÌ´Ù.