42-3-³ª.binary_search

binary_search´Â Á¤·ÄµÈ ±¸°£¿¡¼­ À̺Р°Ë»öÀ¸·Î °ªÀÇ Á¸Àç ¿©ºÎ¸¦ Á¶»çÇÑ´Ù. À̺Р°Ë»öÀº °ªÀÇ ´ë¼Ò¸¦ ±âÁØÀ¸·Î ±¸°£À» Àý¹Ý¾¿ ³ª´©¾î °ªÀ» °Ë»öÇϹǷΠ¹Ýº¹ÀÚ ±¸°£Àº ¹Ýµå½Ã Á¤·ÄµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. Á¤·ÄµÈ ÀڷḦ °Ë»öÇϹǷΠ°Ë»ö ¼Óµµ´Â ±²ÀåÈ÷ ºü¸£´Ù. ¸¸¾à Á¤·ÄµÇ¾î ÀÖÁö ¾Ê´Ù¸é °á°ú´Â ¿¹ÃøÇÒ ¼ö ¾ø´Ù.

 

bool binary_search(FwdIt first, FwdIt last, const T& val [, BinPred F]);

 

ÀÌ ÇÔ¼ö´Â ´ÜÁö ¿øÇÏ´Â °ªÀÌ ±¸°£³»¿¡ ÀÖ´ÂÁö Á¶»ç¸¸ ÇÒ »ÓÀÌÁö ¾îµðÂë¿¡ ÀÖ´ÂÁö´Â Á¶»çÇÏÁö ¾Ê´Â´Ù. °ªÀÌ Á¸ÀçÇϸé true¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é false¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö°¡ °ªÀÇ À§Ä¡¸¦ Á¶»çÇÏÁö ¸øÇÏ´Â ÀÌÀ¯´Â Áߺ¹µÈ °ªÀÌ ÀÖÀ» °æ¿ì Á¤È®ÇÏ°Ô ¿øÇÏ´Â °ªÀÎÁö ¾Æ´ÑÁö¸¦ È®½ÅÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. °ªÀÇ À§Ä¡¸¦ °Ë»öÇÏ·Á¸é ´ÙÀ½ ÇÔ¼öµéÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ¼Â, ¸Ê¿¡ ÀÖ´Â °Ë»ö ¸â¹ö ÇÔ¼ö¿Í °³³äÀûÀ¸·Î µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÑ´Ù.

 

FwdIt lower_bound(FwdIt first, FwdIt last, const T& val [,BinPred F]);

FwdIt upper_bound(FwdIt first, FwdIt last, const T& val [,BinPred F]);

pair< FwdIt, FwdIt > equal_range(FwdIt first, FwdIt last, const T& val [,BinPred F]);

 

lower_bound´Â °ªÀÌ Àִ ù ¹ø° À§Ä¡¸¦ ¸®ÅÏÇÏ¸ç ¸¸¾à ¾ø´Ù¸é ÀÌ °ªÀÌ »ðÀ﵃ ¼ö ÀÖ´Â À§Ä¡¸¦ Á¶»çÇÑ´Ù. upper_bound´Â ¹Ý´ë·Î ¸¶Áö¸· À§Ä¡ÀÇ ´ÙÀ½ À§Ä¡¸¦ ¸®ÅÏÇϴµ¥ ÀÌ´Â °Ë»ö°ªº¸´Ù Å« ÃÖÃÊÀÇ °ª À§Ä¡ÀÌ´Ù. equal_range´Â µÎ ÇÔ¼öÀÇ °á°ú¸¦ pair·Î ¹­¾î¼­ ¸®ÅÏÇÑ´Ù.

 

¿¹ Á¦ : lower_bound

#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 ari[]={49,26,19,77,34,52,84,34,92,69};

     vector<int> vi(&ari[0],&ari[10]);

     vector<int>::iterator it;

 

     dump("¿øº»",vi);

     sort(vi.begin(),vi.end());

     it=lower_bound(vi.begin(),vi.end(),50);

     if (*it == 50) {

          cout << "ã´Â °ªÀÌ Á¸ÀçÇÕ´Ï´Ù." << endl;

     } else {

          vi.insert(it,50);

          dump("»ðÀÔ ÈÄ",vi);

     }

}

 

Á¤¼ö º¤Å͸¦ Á¤·ÄÇÑ ´ÙÀ½¿¡ lower_bound·Î 50À» °Ë»öÇØ º¸¾Ò´Ù. ÀÌ °ªÀÌ ÀÌ¹Ì ÀÖ´Ù¸é À§Ä¡°¡ °Ë»öµÉ °ÍÀÌ°í ¾ø´Ù¸é 50ÀÌ µé¾î°¥ ¼ö ÀÖ´Â À§Ä¡ÀÎ 52ÀÇ À§Ä¡°¡ °Ë»öµÈ´Ù. ÀÌ °æ¿ì upper_bound·Î °Ë»öÇصµ °á°ú´Â µ¿ÀÏÇÏ´Ù.

 

¿øº»        ==> 49 26 19 77 34 52 84 34 92 69

»ðÀÔ ÈÄ     ==> 19 26 34 34 49 50 52 69 77 84 92

 

¸¸¾à ÁߺϵǾî ÀÖ´Â °ª 34¸¦ °Ë»öÇÑ´Ù¸é ¾î¶² ÇÔ¼ö·Î °Ë»öÇϴ°¡¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁø´Ù.

34ÀÇ ¾ÕÂÊ¿¡ ¹º°¡¸¦ »ðÀÔÇÏ°í ½Í´Ù¸é lower_bound·Î À§Ä¡¸¦ °Ë»öÇÏ¸é µÇ°í 34ÀÇ µÚÂÊ¿¡ ¹º°¡¸¦ »ðÀÔÇÏ°í ½Í´Ù¸é upper_bound·Î °Ë»öÇÏ¸é µÈ´Ù.