¾Õ Ç׿¡¼´Â ¼ÂÀÇ °³³äÀ» ¼³¸íÇϱâ À§ÇØ Á¤¼ö¸¸ ÁÖ·Î ³Ö¾î º¸¾Ò´Âµ¥ ¼ÂÀº ÅÛÇø´À̹ǷΠÁ¤¼ö»Ó¸¸ ¾Æ´Ï¶ó ÀÓÀÇÀÇ Å¸ÀÔÀ» ¸ðµÎ ³ÖÀ» ¼ö ÀÖ´Ù. ÀÌ¹Ì stringÀ» ÀúÀåÇÏ´Â ¼ÂÀ» ¸¸µé¾î º» ÀûÀÌ Àִµ¥ Àß µ¿ÀÛÇÑ´Ù. ±×·¯³ª ¾Æ¹« ŸÀÔÀ̳ª ´Ù ¼Â¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï°í ÀÏÁ¤ÇÑ Á¶°ÇÀ» ¸¸Á·ÇÏ´Â °´Ã¼¸¸ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¼ÂÀº ۸¦ »ðÀÔÇÒ ¶§ Ç×»ó Á¤·ÄµÈ À§Ä¡¿¡ »ðÀÔÇϴµ¥ ¿Ã¹Ù¸¥ »ðÀÔ À§Ä¡¸¦ ã±â À§Çؼ´Â ºñ±³ ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. °£´ÜÇÑ Å¬·¡½ºÀÎ TimeÀÇ ¼ÂÀ» »ý¼ºÇØ º¸ÀÚ.
|
¿¹ Á¦ : TimeSet |
#include <iostream>
#include <set>
#include <functional>
using namespace std;
class Time
{
protected:
int hour,min,sec;
public:
Time(int h,int m,int s) { hour=h;min=m;sec=s; }
void OutTime() { printf("%d:%d:%d\n",hour,min,sec); }
bool operator <(const Time &T) const {
return (hour*3600+min*60+sec < T.hour*3600+T.min*60+T.sec);
}
};
void main()
{
set<Time> Times;
Times.insert(Time(1,1,1));
Times.insert(Time(9,8,7));
Times.insert(Time(2,3,4));
set<Time>::iterator it;
for (it=Times.begin();it!=Times.end();it++) {
(*it).OutTime();
}
}
Time Ŭ·¡½º°¡ ¹Ì¸¸ ºñ±³ ¿¬»êÀÚÀÎ <¸¦ Á¤ÀÇÇϰí Àִµ¥ »óµî ºñ±³³ª ´Ù¸¥ ºÎµî ºñ±³ ¿¬»êÀÚ´Â ²À Á¤ÀÇÇÏÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù. ¼ÂÀÇ µðÆúÆ® ºñ±³ ÇÔ¼ö °´Ã¼ÀÎ less°¡ ¿ä¼Ò °´Ã¼ÀÇ < ¿¬»êÀÚ·Î ºñ±³¸¦ ¼öÇàÇϹǷΠÀÏ´ÜÀº < ¿¬»êÀÚ¸¸ Á¤ÀǵǾî ÀÖÀ¸¸é µÈ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
1:1:1
2:3:4
9:8:7
¿ä¼Ò¸¦ »ðÀÔÇÒ ¶§ÀÇ ¼ø¼¿Í´Â ´Ù¸£°Ô ¿À¸§Â÷¼øÀ¸·Î Àß Á¤·ÄµÇ¾î Àִµ¥ ÀÌ·± Á¤·ÄÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â TimeÀÌ < ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ¿© ½Ã°£ °´Ã¼³¢¸® ´ë¼Ò °ü°è¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇϱ⠶§¹®ÀÌ´Ù. ¸¸¾à Time Ŭ·¡½ºÀÇ < ¿¬»êÀÚ¸¦ ÁÖ¼® ó¸®ÇØ ¹ö¸®¸é ¾û¶×ÇÑ °÷¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
struct less : public binary_function<T, T, bool>
{
bool operator()(const T& Left, const T& Right) const {
return (Left < Right);
}
};
¼ÂÀÇ insert ÇÔ¼ö´Â »õ·Î »ðÀԵǴ ŰÀÇ À§Ä¡¸¦ Á¶»çÇϱâ À§ÇØ ÀÌ¹Ì »ðÀÔµÈ Å°¿Í ºñ±³Çϴµ¥ ÀÌ °úÁ¤¿¡¼ ºñ±³ ÇÔ¼ö °´Ã¼¸¦ È£ÃâÇÑ´Ù. µðÆúÆ® ºñ±³ ÇÔ¼ö °´Ã¼°¡ less·Î ÁöÁ¤µÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ °´Ã¼ÀÇ () ¿¬»êÀÚ°¡ È£ÃâµÇ´Âµ¥ ÀÌ ¿¬»êÀÚ º»Ã¼¿¡¼´Â ¼ÂÀÇ ¿ä¼Ò ŸÀÔ¿¡ Á¤ÀǵǾî ÀÖ´Â < ¿¬»êÀÚ·Î ¿ä¼Ò³¢¸® ºñ±³¸¦ ¼öÇàÇÑ´Ù. ±×·±µ¥ TimeÀÌ < ¿¬»êÀÚ¸¦ Á¦°øÇÏÁö ¾ÊÀ¸¹Ç·Î ¿¡·¯°¡ ³ª´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.
Time °´Ã¼¸¦ ¼Â¿¡ ÀúÀåÇϱâ À§Çؼ´Â < ¿¬»êÀÚ¸¦ Á¦°øÇØ¾ß Çϴµ¥ ÀÌ´Â ¼ÂÀÇ ºñ±³ ÇÔ¼ö °´Ã¼ÀÎ less°¡ ÀÌ ¿¬»êÀÚ¸¦ ¿ä±¸Çϱ⠶§¹®ÀÌ´Ù. ¸¸¾à setÀÇ ºñ±³ °´Ã¼¸¦ greater·Î º¯°æÇÑ´Ù¸é À̶§´Â < ¿¬»êÀÚ°¡ ¾Æ´Ñ > ¿¬»êÀÚ¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ¾ÕÀÇ ¿¹Á¦¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¸é ¿À¸§Â÷¼øÀ¸·Î Á¤·ÄµÉ °ÍÀÌ´Ù.
class Time
{
....
bool operator >(const Time &T) const {
return (hour*3600+min*60+sec > T.hour*3600+T.min*60+T.sec);
}
};
void main()
{
set<Time, greater<Time> > Times;
....
}
¿À¸§Â÷¼øÀÌµç ³»¸²Â÷¼øÀÌµç ¾î·µç Á¤·Ä¸¸ °¡´ÉÇÏ¸é ¼Â¿¡ ÀúÀåµÉ ¼ö ÀÖ´Ù. ¼ÂÀ̶õ Á¤·ÄµÈ ÀڷḦ ±â¹ÝÀ¸·Î Áߺ¹ Á¦°Å¿Í ºü¸¥ °Ë»öÀ» Á¦°øÇÏ´Â ÄÁÅ×À̳ÊÀ̹ǷΠ¸ñÀûÀ» ÀÌ·ç±â À§Çؼ´Â ºñ±³°¡ ÇʼöÀûÀÌ´Ù. less, greater °°Àº ¹Ì¸® Á¦°øµÇ´Â ÇÔ¼ö °´Ã¼ ´ë½Å »ç¿ëÀÚ°¡ Á÷Á¢ ¸¸µç ÇÔ¼ö °´Ã¼ ŸÀÔÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
|
¿¹ Á¦ : TimeComp |
#include <iostream>
#include <set>
#include <functional>
using namespace std;
class Time
{
friend struct TimeComp;
protected:
int hour,min,sec;
public:
Time(int h,int m,int s) { hour=h;min=m;sec=s; }
void OutTime() { printf("%d:%d:%d\n",hour,min,sec); }
};
struct TimeComp : public binary_function<Time,Time,bool>
{
bool operator()(const Time &a, const Time &b) const {
return (a.hour*3600+a.min*60+a.sec < b.hour*3600+b.min*60+b.sec);
}
};
void main()
{
set<Time,TimeComp> Times;
Times.insert(Time(1,1,1));
Times.insert(Time(9,8,7));
Times.insert(Time(2,3,4));
set<Time,TimeComp>::iterator it;
for (it=Times.begin();it!=Times.end();it++) {
(*it).OutTime();
}
}
TimeComp¶ó´Â ÇÔ¼ö °´Ã¼ Ŭ·¡½º¸¦ Á¤ÀÇÇϰí ÀÌ Å¬·¡½ºÀÇ () ¿¬»êÀÚ°¡ µÎ °³ÀÇ TimeÀ» ¹Þ¾Æ ´ë¼Ò¸¦ ºñ±³ÇÑ´Ù. TimeComp°¡ TimeÀÇ ÇÁ¶óÀ̺ñÆ® ¸â¹ö¸¦ Àоî¾ß ÇϹǷΠTimeÀº ÀÌ Å¬·¡½º¸¦ ÇÁ·»µå·Î ÁöÁ¤Çß´Ù.
set ÅÛÇø´ÀÇ µÎ ¹øÂ° Àμö·Î TimeComp ŸÀÔÀ» ÁöÁ¤Çϸé setÀÇ µðÆúÆ® »ý¼ºÀÚ´Â ÀÌ Å¸ÀÔÀÇ µðÆúÆ® »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© ºñ±³ °´Ã¼¸¦ Çϳª ¸¸µé°í ºñ±³°¡ ÇÊ¿äÇÒ ¶§¸¶´Ù ÀÌ ÇÔ¼ö °´Ã¼ÀÇ () ¿¬»êÀÚ¸¦ È£ÃâÇÒ °ÍÀÌ´Ù. () ¿¬»êÀÚ°¡ ¾Õ ¿¹Á¦ÀÇ < ¿¬»êÀÚ¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î Time °´Ã¼¸¦ ºñ±³ÇϹǷΠ½ÇÇà °á°ú´Â ÀÏ´Ü µ¿ÀÏÇÏ´Ù.
±×·¯³ª ÇÔ¼ö °´Ã¼´Â ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î °´Ã¼µéÀ» ºñ±³ÇÒ ¼ö ÀÖ´Ù´Â ¸é¿¡¼ ÈξÀ ´õ À¯¿¬ÇÏ´Ù. ½Ã°£ÀÌ¾ß º° ´Ù¸¥ ºñ±³ ¹æ¹ýÀÌ ´õ ¾ø°ÚÁö¸¸ ¹®ÀÚ¿ÀÇ °æ¿ì ´ë¼Ò¸¦ ±¸ºÐÇÒ °ÍÀÎÁö ¾Æ´ÑÁö, ÇѱÛÀÌ ¸ÕÀúÀÎÁö ¿µ¹®ÀÌ ¸ÕÀúÀÎÁö µîÀÇ ±ÔÄ¢À» ³ª¸§´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¼ºÀû ±¸Á¶Ã¼¸¦ Á¤·ÄÇØ ³Ö´Â´Ù¸é ÃÑÁ¡ÀÌ °°À» °æ¿ì Ç¥ÁØÆíÂ÷°¡ ÀÛÀºÂÊ¿¡ ´õ ³ôÀº Á¡¼ö¸¦ ÁÖ´Â ½ÄÀ¸·Î ÀÌÂ÷ Á¤·Ä ±âÁØÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
¼ÂÀº ¿øÇÏ´Â ºñ±³ ¹æ¹ýÀ» ¸¶À½´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï µÎ ¹øÂ° ÅÛÇø´ Àμö·Î »ç¿ëÀÚ°¡ ¸¸µç ÇÔ¼ö °´Ã¼¸¦ ¹Þ¾ÆµéÀ̸ç ÀÌ °´Ã¼ÀÇ ºñ±³ ¹æ½ÄÀ» ±×´ë·Î µû¸¥´Ù. ÅÛÇø´ÀÇ Àμö·Î Àü´ÞµÇ¾î¾ß ÇϹǷΠ´Ü¼øÇÑ ÇÔ¼ö Æ÷ÀÎÅÍ´Â »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç ¹Ýµå½Ã ŸÀÔÀ¸·Î Á¤ÀǵǴ Ŭ·¡½º¿©¾ß ÇÑ´Ù. setÀº ºñ±³ ÇÔ¼ö °´Ã¼¸¦ »ý¼ºÇؼ °¡Áö°í ÀÖ´Ù°¡ ºñ±³ÇÒ ¶§ °´Ã¼ÀÇ () ¿¬»êÀÚ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÇÔ¼ö °´Ã¼°¡ ÇÔ¼ö Æ÷ÀÎÅÍ¿¡ ºñÇØ ÀÌ·± ¸éÀÌ ´õ ¿ì¿ùÇÏ´Ù.
¼Â¿¡ ÀÓÀÇÀÇ Å¸ÀÔÀ» ¿ä¼Ò·Î ÀúÀåÇÒ ¼ö ÀÖ´Ù°í ÇßÀ¸¹Ç·Î °´Ã¼ÀÇ Æ÷ÀÎÅ͵µ ¼Â¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù. Æ÷ÀÎÅÍ´Â ±âº»ÀûÀ¸·Î ºñ±³ ¿¬»êÀ» Á¦°øÇϹǷΠ¼ÂÀÇ ¿ä¼Ò°¡ µÇ±â À§ÇÑ ¿ä°ÇÀ» ¸¸Á·Çϱâ´Â ÇÏÁö¸¸ °´Ã¼ÀÇ ¹øÁö¸¦ ±âÁØÀ¸·Î Á¤·ÄÇÏ´Â °ÍÀº ½Ç¿ë¼ºÀÌ ¾øÀ¸¸ç Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷ÀÇ ½ÇÁ¦ °´Ã¼¸¦ ±âÁØÀ¸·Î Á¤·ÄÇØ¾ß ÇÑ´Ù. À̶§µµ »ç¿ëÀÚ°¡ ºñ±³ ÇÔ¼ö °´Ã¼¸¦ Á÷Á¢ Á¦°øÇØ¾ß ÇÑ´Ù.
¿¹¸¦ µé¾î TimeÇü °´Ã¼°¡ ¾Æ´Ñ TimeÀÇ Æ÷ÀÎÅÍ ÁýÇÕÀ» ¼Â¿¡ ÀúÀåÇÑ´Ù°í ÇØ º¸ÀÚ. TimeSet ¿¹Á¦ÀÇ main ÇÔ¼ö Äڵ常 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.
void main()
{
set<Time *> Times;
Times.insert(new Time(1,1,1));
Times.insert(new Time(9,8,7));
Times.insert(new Time(2,3,4));
set<Time *>::iterator it;
for (it=Times.begin();it!=Times.end();it++) {
(**it).OutTime();
}
for (it=Times.begin();it!=Times.end();it++) {
delete *it;
}
}
new ¿¬»êÀÚ·Î Time °´Ã¼¸¦ µ¿Àû ÇÒ´çÇÏ¿© ¼Â¿¡ »ðÀÔÇϰí Á¾·á Àü¿¡ ¼ÂÀÇ ¿ä¼Ò¸¦ ¼øÈ¸ÇÏ¸é¼ delete·Î Á÷Á¢ »èÁ¦Çß´Ù. º¤ÅÍ¿Í ¸¶Âù°¡Áö·Î ¼Âµµ ¿ä¼Ò¸¸ °ü¸®ÇÒ »Ó ¿ä¼Ò°¡ °¡¸®Å°´Â ½Çü±îÁö °ü¸®ÇÏÁö´Â ¾Ê´Â´Ù. ¼Â¿¡ ÀúÀåµÈ ŸÀÔÀÌ Time*À̹ǷΠ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â °÷¿¡´Â Time *°¡ ÀÖÀ» »ÓÀÌ´Ù. ±×·¡¼ Ãâ·ÂÇÒ ¶§µµ **it·Î µÎ ¹ø ÂüÁ¶ÇØ¾ß Time °´Ã¼¸¦ ÀÐÀ» ¼ö ÀÖ´Ù. ¹«»çÈ÷ ÄÄÆÄÀÏÀº µÇÁö¸¸ ½ÇÇà °á°ú´Â ¿¹»ó´ë·Î µÇÁö ¾Ê´Â´Ù.
1:1:1
9:8:7
2:3:4
Á¤·ÄÀÌ Á¦´ë·Î µÇÁö ¾Ê¾Ò´Âµ¥ ¿Ö³ÄÇÏ¸é Æ÷ÀÎÅÍÀÇ ´ë¼Ò °ü°è¸¸À» µûÁ® Á¤·ÄÇϱ⠶§¹®ÀÌ´Ù. ÀϹÝÀûÀ¸·Î ¸ÕÀú »ý¼ºµÈ °´Ã¼°¡ ³·Àº ¹øÁö¿¡ ÀÖÀ» È®·üÀÌ ³ôÀ¸¹Ç·Î »ý¼ºµÈ ¼ø¼´ë·Î ¼Â¿¡ »ðÀԵǾú´Âµ¥ ¾îµð±îÁö³ª È®·üÀÏ»ÓÀ̹ǷΠ½ÇÁ¦ ¾î¶² ¹øÁö¿¡ ÇÒ´çµÇ´Â°¡¿¡ µû¶ó °á°ú´Â ¸Å¹ø ´Þ¶óÁú °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é °Ë»öÇÒ ¶§µµ Æ÷ÀÎÅÍ·Î °Ë»öÀ» ÇϹǷΠ¿ÏÀüÈ÷ µ¿ÀÏÇÑ °°Àº ¹øÁö¿¡ ÀÖ´Â °´Ã¼°¡ ¾Æ´Ñ ÇÑÀº °Ë»öµÇÁö ¾Ê´Â´Ù.
¿ì¸®°¡ ¿øÇÏ´Â ¹Ù´Â Æ÷ÀÎÅÍÀÇ ¹øÁö¸¦ ±âÁØÀ¸·Î Á¤·ÄÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷¿¡ ÀÖ´Â Time °´Ã¼ÀÇ ½ÇÁ¦°ªÀ¸·Î Á¤·ÄÇÏ´Â °ÍÀÌ´Ù. µðÆúÆ® ºñ±³ °´Ã¼ÀÎ less´Â ¼Â ¿ä¼Ò ŸÀÔÀÇ < ¿¬»êÀÚ¸¸À¸·Î ºñ±³ÇϹǷΠless·Î´Â ¿øÇϴ´ë·Î Á¤·ÄÇÒ ¼ö ¾ø´Ù. Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ½ÇÁ¦ ¿ä¼Ò°ªÀ¸·Î Á¤·ÄÇÏ´Â ºñ±³ ÇÔ¼ö °´Ã¼¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¿Ï¼ºµÈ ¿¹Á¦´Â ´ÙÀ½°ú °°´Ù.
|
¿¹ Á¦ : TimePtrSet |
#include <iostream>
#include <set>
#include <functional>
using namespace std;
class Time
{
protected:
int hour,min,sec;
public:
Time(int h,int m,int s) { hour=h;min=m;sec=s; }
void OutTime() { printf("%d:%d:%d\n",hour,min,sec); }
bool operator <(const Time &T) const {
return (hour*3600+min*60+sec < T.hour*3600+T.min*60+T.sec);
}
};
struct Timeless : public binary_function<const Time *,const Time *,bool> {
bool operator() (const Time *A, const Time *B) {
return *A < *B;
}
};
void main()
{
set<Time *, Timeless> Times;
Times.insert(new Time(1,1,1));
Times.insert(new Time(9,8,7));
Times.insert(new Time(2,3,4));
set<Time *, Timeless>::iterator it;
for (it=Times.begin();it!=Times.end();it++) {
(**it).OutTime();
}
for (it=Times.begin();it!=Times.end();it++) {
delete *it;
}
}
Timeless ÇÔ¼ö °´Ã¼ÀÇ () ¿¬»êÀÚ´Â TimeÇü Æ÷ÀÎÅÍ µÑÀ» Àμö·Î Àü´Þ¹Þ¾Æ Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷ÀÇ ½Çü³¢¸® ºñ±³ÇÑ´Ù. Time Ŭ·¡½º°¡ < ¿¬»êÀÚ¸¦ Á¤ÀÇÇϰí ÀÖÀ¸¹Ç·Î Æ÷ÀÎÅÍ¿¡ * ¿¬»êÀÚ¸¦ Àû¿ëÇÑ °´Ã¼³¢¸® < ¿¬»êÀÚ·Î Á÷Á¢ ºñ±³Çß´Ù. Time¿¡ < ¿¬»êÀÚ¸¦ »èÁ¦Çϰí Timeless°¡ Á÷Á¢ ºñ±³ÇÒ ¼öµµ ÀÖÀ¸³ª ÀÌ·¸°Ô ÇÏ·Á¸é ÇÁ·»µå ÁöÁ¤ÀÌ ÇÊ¿äÇÏ´Ù.