41-1-´Ù.°´Ã¼ÀÇ ¼Â

°´Ã¼ÀÇ ÁýÇÕ

¾Õ Ç׿¡¼­´Â ¼ÂÀÇ °³³äÀ» ¼³¸íÇϱâ À§ÇØ Á¤¼ö¸¸ ÁÖ·Î ³Ö¾î º¸¾Ò´Âµ¥ ¼ÂÀº ÅÛÇø´À̹ǷΠÁ¤¼ö»Ó¸¸ ¾Æ´Ï¶ó ÀÓÀÇÀÇ Å¸ÀÔÀ» ¸ðµÎ ³ÖÀ» ¼ö ÀÖ´Ù. ÀÌ¹Ì 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°¡ Á÷Á¢ ºñ±³ÇÒ ¼öµµ ÀÖÀ¸³ª ÀÌ·¸°Ô ÇÏ·Á¸é ÇÁ·»µå ÁöÁ¤ÀÌ ÇÊ¿äÇÏ´Ù.