STL Á¤·Ä¿¬°ü ÄÁÅ×À̳Ê
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
  • wiki ½ºÅ¸ÀÏ·Î º¯°æ : 2009/12/23

¸ñÂ÷

1 Association ÄÁÅ×À̳ʶõ?
2 Sorted Association ÄÁÅ×À̳Ê
2.1 map
2.1.1 Ư¡
2.1.2 ¼±¾ð
2.1.3 ÀÚÁÖ »ç¿ëµÇ´Â ¸â¹ö ÇÔ¼öµé
2.1.3.1 À§Ä¡ Á¢±Ù °ü·Ã
2.1.3.2 »ðÀÔ / »èÁ¦ °ü·Ã
2.1.3.3 ¿ø¼ÒÀÇ Å©±â °ü·Ã
2.1.3.4 ±âŸ ÇÔ¼ö
2.2 multimap
2.2.1 Ư¡
2.2.2 ¼±¾ð
2.2.3 ÀÚÁÖ»ç¿ëÇÏ´Â ÇÔ¼ö
2.3 set
2.3.1 Ư¡
2.3.2 ¼±¾ð
2.3.3 ÀÚÁÖ »ç¿ëµÇ´Â ÇÔ¼öµé
2.3.3.1 À§Ä¡ Á¢±Ù °ü·Ã
2.3.3.2 »ðÀÔ / »èÁ¦ °ü·Ã
2.3.3.3 ¿ø¼ÒÀÇ Å©±â °ü·Ã
2.4 multiset
2.4.1 Ư¡
2.4.2 ÀÚÁÖ »ç¿ëµÇ´Â ÇÔ¼ö
3 °á·Ð

1 Association ÄÁÅ×À̳ʶõ?

¾Õ¼­ sequence container¿¡¼­ STL Sequences ÄÁÅ×À̳ʿ¡ ´ëÇÑ ³»¿ëÀ» ´Ù·ç¾ú´Ù. ¿©±â¿¡¼­´Â Á¤·Ä ¿¬°ü ÄÁÅ×ÀÌ³Ê (Association Container)¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ´Ù. ¿ì¼±Àº Association ÄÁÅ×À̳ʰ¡ Sequences ÄÁÅ×À̳ʿÍÀÇ ´Ù¸¥ Á¡À» ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

Association ÄÁÅ×À̳ʴ Sorted Associative Container °ú Hash Associative Container 2°³ÀÇ ÄÁÅ×À̳ʸ¦ Æ÷ÇÔÇÑ´Ù. ¿ø¹®Àº Á¤·Ä ¿¬°ü ÄÁÅ×À̳ʸ¸ ¼³¸íÇßÀ¸³ª À̹ø wiki ½ºÅ¸ÀÏ·Î ¹®¼­¸¦ º¯°æÇϸ鼭 Hash Associative ÄÁÅ×À̳ʿ¡ ´ëÇÑ ¼³¸íµµ Æ÷ÇÔÇϱâ·Î Çß´Ù.

Assocative ÄÁÅ×À̳ʶó°í ºÎ¸£´Â ÀÌÀ¯´Â ÀԷµǴ ¿ø¼ÒµéÀÌ Å°=>°ªÇüÅ·ΠŰ·Î ¼­·Î ¿¬°ü µÇ¾îÀֱ⠶§¹®ÀÌ´Ù. Sequence ÄÁÅ×ÀÌ³Ê¿Í ¸¶Âù°¡Áö·Î ÄÁÅ×À̳ÊÀÇ Å©±â´Â ÀÚÀ¯·Ó°Ô È®ÀåµÇ¸ç, ۸¦ ±âÁØÀ¸·Î ¿ø¼Ò¸¦ °Ë»öÇÒ ¼ö ÀÖ´Ù.

Association ÄÁÅ×À̳ʴ Á¤·Ä ¿¬°ü ÄÁÅ×ÀÌ³Ê¿Í Hash ¿¬°ü ÄÁÅ×À̳ÊÀÇ µÎ°¡Áö Á¾·ù°¡ ÀÖ´Ù. ¿©±â¿¡¼­´Â Á¤·Ä ¿¬°ü ÄÁÅ×À̳ʸ¸ ´Ù·é´Ù. Hash ¿¬°ü ÄÁÅ×À̳ʴ Hash Association Container¸¦ Âü°íÇÑ´Ù.

2 Sorted Association ÄÁÅ×À̳Ê

Associative ContainerÀº Ű=>°ªÀÇ ÇüŸ¦ °¡Áø´Ù. Á¤·Ä ¿¬°ü ÄÁÅ×À̳ʴ ¿ø¼Ò°¡ ÀԷµǸé ۸¦ ±âÁØÀ¸·Î Á¤·ÄÀÌ µÈ´Ù.

¾Æ·¡ÀÇ ¿¹´Â Association ÄÁÅ×À̳ÊÁß °¡Àå ´ëÇ¥ÀûÀÎ map ¿¡ ´ëÇÑ °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.

¿¹Á¦ : name_map.cc
include <string> 
include <map> 
 
int main() 
{ 
    map<string, string> cfg_data; 
 
    cfg_data["yundream"] = "À±µå¸²"; 
    cfg_data["zood"] = "È«¹«°³"; 
    cfg_data["goodday"] = "±è±æµ¿"; 
} 
 
À§ÀÇ ¿¹Á¦¸¦ ÄÄÆÄÀÏ ÇØ¼­ ½ÇÇà½Ã۸é, ´ÙÀ½°ú °°Àº °á°ú¸¦ º¼ ¼ö ÀÖ´Ù.
[root@localhost test]# ./name_map 
goodday : ±è±æµ¿ 
yundream : À±µå¸² 
zooz : È«¹«°³ 
 
۰ªÀÎ yundream, zood, goodday¸¦ ±âÁØÀ¸·Î Á¤·ÄµÇ¾î ÀÖ´Â°É º¼ ¼ö ÀÖ´Ù. Á¤·Ä ¿¬°ü ÄÁÅ×À̳ʵµ ´Ù¸¥ STL ÄÁÅ×ÀÌ³Ê¿Í ¸¶Âù°¡Áö·Î ÄÁÅ×À̳ÊÀÇ Å©±â°¡ ÀÚµ¿À¸·Î Á¶ÀýµÈ´Ù. ¿ø¼ÒÀÇ »èÁ¦/»ðÀÔÀ» Áö¿øÇÏÁö¸¸, Sequence ÄÁÅ×ÀÌ³Ê¿Í °°ÀÌ Æ¯Á¤ÇÑ À§Ä¡¿¡ ¿ø¼Ò¸¦ »ðÀÔÇÒ¼ö ÀÖ´Â ±â´ÉÀº Á¦°øÇÏÁö ¾Ê´Â´Ù. ¿ø¼ÒÀÇ ÀԷ½à Á¤·ÄÀÌ µÇ¹Ç·Î ƯÁ¤ À§Ä¡¿¡ ¿ø¼Ò¸¦ »ðÀÔÇÏ´Â°Ô Àǹ̰¡ ¾ø´Ù.

Á¤¿­¿¬°ü ÄÁÅ×À̳ʿ¡´Â map, multimap, set, multiset µîÀÌ ÀÖ´Ù. ´ÙÀ½Àå¿¡¼­´Â ÀÌ·¯ÇÑ °¢°¢ÀÇ ÄÁÅ×À̳ʿ¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

2.1 map

2.1.1 Ư¡

map Àº Sorted Á¤·Ä ¿¬°ü ÄÁÅ×ÀÌ³Ê À̸ç, Key ¿Í Value ÀÇ ½ÖÀ¸·Î ÀÌ·ç¾îÁø ÀڷᱸÁ¶ÀÌ´Ù. php³ª perl, python °ú °°Àº ¾ð¾î¿¡¼­ map Àº ¸Å¿ì ±âº»ÀûÀÎ ÀڷᱸÁ¶´Ù. À̵é¾ð¾î¸¦ »ç¿ëÇØ ºÃ´Ù¸é ("mon" => "¿ù¿äÀÏ", "Tue => "È­¿äÀÏ") °ú °°Àº ¹®¹ý¿¡ Àͼ÷ÇÒ°ÍÀÌ´Ù. ´Ù¸¥ ÄÁÅ×ÀÌ³Ê¿Í ¸¶Âù°¡Áö·Î key¿Í value ¿¡ »ç¿ëµÇ´Â ÀÚ·áÇüÅ¿¡ Á¦ÇÑÀº ¾ø´Ù. int, string, Æ÷ÀÎÅÍ, object, struct, ¶Ç´Ù¸¥ ÄÁÅ×ÀÌ³Ê µé±îÁö »ç¿ëÇÒ ¼ö ÀÖ´Ù.

map ¸¦ »ç¿ëÇÒ¶§ key ´Â Áߺ¹µÇ¸é ¾ÈµÈ´Ù. ¸¸¾à key °¡ Áߺ¹µÇ¸é µÇ¸é, ÀÌÀüÀÇ value ÀÇ °ªÀ» µ¤¾î½á ¹ö¸°´Ù. key ´Â À¯ÀÏÇØ¾ß ÇÑ´Ù.

2.1.2 ¼±¾ð

map Àº ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ¼ö ÀÖ´Ù.

Ç¥ 1. ÅÛÇø´ Parameters
Parameter ¼³¸í ±âº»°ª
Key map ÀÇ key ÀÌ´Ù.
Data KeyÀÇ °ªÀ¸·Î ÀԷµǴ µ¥ÀÌÅÍ
Compare Key °¡ Á¤·ÄµÇ±â À§ÇØ»ç¿ëµÇ´Â Å©±â ºñ±³ÇÔ¼öÀÌ´Ù. ù¹øÂ° ¾Æ±Ô¸ÕÆ®°¡ 2¹øÂ° ¾Æ±Ô¸ÕÆ®º¸´Ù ÀÛÀ¸¸é true ¸¦ ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇϵµ·Ï ¸¸µç´Ù. less<key>
Alloc mapÀÇ ÇÒ´ç±â ÀÌ´Ù. map Àº ÀÌ ÇÒ´ç±â¸¦ ÅëÇØ¼­ ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù. alloc
º¸ÅëÀº ±âº»ÇÒ´ç±â¸¦ »ç¿ëÇÏ°Ô µÊÀ¸·Î ´ÙÀ½°ú °°ÀÌ map À» ¸¸µé¾î¼­ »ç¿ëÇÒ¼ö ÀÖ´Ù.
#include <map> 
#include <string> 
 
map<string, string> mydata; 
mydata["mon"] = "¿ù¿äÀÏ"; 
mydata["thu"] = "È­¿äÀÏ"; 
cout << mydata["mon"] << endl; 
 
map ÀÇ parameter Áß¿¡ 3¹øÂ°¸¦ º¸¸é Compare °¡ ÀÖ´Ù. À̰ÍÀº Key ºñ±³¸¦ À§ÇÑ ÇÔ¼öÀÌ´Ù. À§ÀÇ ¿¹Á¦ÀÇ °æ¿ì´Â Compare ÇÔ¼ö¸¦ Á¤ÀÇÇØ¼­ »ç¿ëÇÏÁö ¾Ê°í ÀÖ´Ù. ÀÌÀ¯´Â stringÀÌ ºñ±³°¡´ÉÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀ̱⠶§¹®ÀÌ´Ù. ±×·¯³ª char * ŸÀÔÀÇ °æ¿ì¿¡´Â char * ŸÀÔ°£ ºñ±³°¡ ºÒ°¡´ÉÇϹǷΠ¾Æ·¡¿Í °°ÀÌ Compare ÇÔ¼ö¸¦ ¼±¾ðÇØ¼­ »ç¿ëÇØ¾ß ÇÑ´Ù.
struct ltstr 
{ 
    bool operator()(const char *s1, const char *s2) const 
    { 
        return strcmp(s1, s2) < 0; 
    } 
}; 
 
int main() 
{ 
    map<char *, char *, ltstr> mydata; 
    mydata["mon"] = "¿ù¿äÀÏ"; 
    mydata["thu"] = "È­¿äÀÏ"; 
} 
 

2.1.3 ÀÚÁÖ »ç¿ëµÇ´Â ¸â¹ö ÇÔ¼öµé

±âº»ÀûÀ¸·Î STL ¿¡¼­ »ç¿ëµÇ´Â ´ëºÎºÐÀÇ ÄÁÅ×À̳ʵéÀº °°ÀºÀ̸§ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ÀÌ´Â ÇÁ·Î±×·¡¸Ó·Î ÇÏ¿©±Ý ½±°Ô »ç¿ëÇÒ¼ö ÀÖµµ·Ï Çϱâ À§ÇÔÀ̸ç, °£´ÜÈ÷ ÄÁÅ×ÀÌ³Ê À̸§¸¸ ¹Ù²ÞÀ¸·Î½á ÀüÇô ´Ù¸¥ ÄÁÅ×À̳ʷÎÀÇ ÀüȯÀÌ ¼Õ½±°Ô Çϱâ À§ÇÔÀÌ´Ù.

2.1.3.1 À§Ä¡ Á¢±Ù °ü·Ã
Associative Container ´Â Sequence ÄÁÅ×ÀÌ³Ê¿Í ´Ù¸£°Ô À妽º ÷ÀÚ¸¦ ÀÌ¿ëÇÑ Á¢±ÙÀÌ ºÒ°¡´É ÇÏ´Ù. ¿ø·¡°¡ ÷ÀÚ¸¦ ÅëÇØ¼­ ¿ø¼Ò¿¡ Á¢±ÙÇÏ´Â ¹æ½ÄÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. map ÀÇ °æ¿ì iterator ³ª Key À̸§À» ÅëÇØ¼­ Á¢±ÙÇØ¾ß¸¸ ÇÑ´Ù.

iterator ÀÇ »ç¿ëÀº ´Ù¸¥ STL ÄÁÅ×ÀÌ³Ê¿Í °°ÀÌ ÄÁÅ×À̳ÊÀÇ Ã³À½À§Ä¡¸¦ µ¹·ÁÁÖ´Â begin() °ú ¸¶Áö¸·À» µ¹·ÁÁÖ´Â end()°¡ ÀÖ´Ù.

iterator begin(); 
iterator end(); 
 

À̵éÀº ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
struct ltstr 
{ 
     bool operator()(const char *s1, const char *s2) const 
     { 
         return strcmp(s1, s2) < 0; 
     } 
}; 
 
int main() 
{ 
    map<char *, char *, ltstr> mydata; 
    mydata["january"] = 31; 
    mydata["february"] = 28; 
    mydata["march"] = 31; 
    mydata["april"] =30  
    mydata["may"] =31; 
 
    cout << "april -> " << mydata["april"] << endl; 
 
    map<char *, char *, ltstr>::iterator cur = mydata.begin(); 
    while(cur != mydata.end()) 
    { 
        cout << cur->first << ":" << cur->second << endl; 
        *cur++; 
    } 
     
} 
 
find()¸¦ ÀÌ¿ëÇϸé ÀÏÄ¡ÇÏ´Â key À̸§À» °¡¸£Å°´Â iterator ¸¦ µÇµ¹·ÁÁØ´Ù.
iterator find(const key_type& k);  
                     
map<char *, char *, ltstr>::iterator fi; 
fi = find("march"); 
cout << fi->second << endl; 
 

2.1.3.2 »ðÀÔ / »èÁ¦ °ü·Ã
¿ø¼Ò¸¦ »ðÀÔÇϰųª º¯°æÇϱâ À§ÇÑ °¡Àå °£´ÜÇÑ ¹æ¹ýÀº "namekey=value" À» ÀÌ¿ëÇÑ ¹æ¹ýÀÌ´Ù. µ¿ÀÏÇÑ key À̸§ÀÌ ¾ø´Ù¸é »õ·Î »ðÀԵɰÍÀ̰í, ÀÌ¹Ì µ¿ÀÏÇÑ key À̸§ÀÌ ÀÖ´Ù¸é ±âÁ¸ÀÇ key ÀÇ value °ªÀÌ º¯°æµÉ °ÍÀÌ´Ù.

¶ÇÇÑ insert()¶ó´Â ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¿ø¼Ò¸¦ Ãß°¡ÇÒ ¼öµµ ÀÖ´Ù. (ÀÌÇÔ¼ö´Â ´Ù¸¥ multimap, set, multiset µî¿¡µµ »ç¿ëµÈ´Ù).
pair<iterator, bool> insert(const value_type&& x); 
iterator insert(iterator pos, const value_type&& x); 
template <class InputIterator> void insert(InputIterator, InputIterator); 
 
insert ¸¦ ÀÌ¿ëÇØ¼­ ¿ø¼Ò¸¦ »ðÀÔÇÒ°æ¿ì x ۰¡ ÀÌ¹Ì ÀÖ´Ù¸é, º¯°æµÇ°í ±×·¸Áö ¾Ê´Ù¸é »ðÀԵȴÙ. iterator À» ÁÙ°æ¿ì insert ¸¦ À§Çؼ­ À§Ä¡°Ë»öÀ» ÇÏ°ÔµÉ À§Ä¡¸¦ ÁöÁ¤ÇØ ÁÙ¼öµµ ÀÖ´Ù.
map<string, string> cfg_data; 
 
cfg_data.insert(pair<string, string>("yundream", "ok")); 
cfg_data.insert(pair<string, string>("yundream3", "ok")); 
map<string, string>::iterator mi; 
mi = cfg_data.begin(); 
*mi++; 
cfg_data.insert(mi, pair<string, string>("yundream2", "ok")); 
 
°ªÀ» º¯°æÇÏ´Â ¶Ç´Ù¸¥ ¹æ¹ýÀº iterator->second ¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀÌ´Ù. ¿øÇϴ Ű °ªÀÇ À§Ä¡¸¦ find() ¸¦ ÅëÇØ¼­ ã¾Æ³»°í iterator->second = value ÀÇ ¹æ½ÄÀ» ÀÌ¿ëÇØ¼­ °ªÀ» º¯°æÇÒ¼ö ÀÖ´Ù.

¿øÇÏ´Â key ¸¦ »èÁ¦Çϱâ À§Çؼ­ erase()¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
void erase(iterator pos); 
size_type erase(const key_type &k); 
 
key °ªÀ» ÀÌ¿ëÇØ¼­ »èÁ¦ÇÒ¼öµµ ÀÖ°í, À§Ä¡¸¦ °¡¸£Å°´Â iterator ¸¦ ¾Ë°í ÀÖÀ»°æ¿ì iterator ¸¦ ÀÌ¿ëÇØ¼­ »èÁ¦ÇÒ¼öµµ ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ 2 °³ÀÇ iterator ¸¦ ÀÌ¿ëÇØ¼­ ƯÁ¤¹üÀ§ÀÇ ¿ä¼Ò¸¦ ¸ðµÎ »èÁ¦ÇÒ¼öµµ ÀÖÀ¸¸ç
void erase (iterator first, iterator last); 
 
ÄÁÅ×À̳ʿ¡ Æ÷ÇÔµÈ ¸ðµç ¿ä¼Ò¸¦ »èÁ¦ÇÒ¼öµµ ÀÖ´Ù.
void clear(); 
 
erase(begin(), end())·Î clear()°ú °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù.
2.1.3.3 ¿ø¼ÒÀÇ Å©±â °ü·Ã
ÇöÀç ÄÁÅ×À̳ʿ¡ Æ÷ÇÔµÈ ¿ø¼ÒÀÇ Å©±â¸¦ ¾Ë·ÁÁÖ±â À§Çؼ­ 2°³ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
size_type size() const; 
bool empty() const; 
 
size() ´Â ÇöÀç ÄÁÅ×À̳ʿ¡ Æ÷ÇÔµÈ ¿ø¼ÒÀÇ °¹¼ö¸¦ ¾Ë·ÁÁØ´Ù. empty()´Â ÄÁÅ×À̳ʿ¡ ¿ø¼Ò°¡ ÀÖ´ÂÁö ¾ø´ÂÁö È®ÀÎÇÑ´Ù. ¿ø¼Ò°¡ ¾ø´Ù¸é 1 ±×·¸Áö ¾ÊÀ»°æ¿ì 0À» µÇµ¹·ÁÁØ´Ù. empty() Á¶»ç´Â size() == 0 À» ÅëÇØ¼­µµ °Ë»çÇÒ¼ö ÀÖ°ÚÁö¸¸, ´ÜÁö ¿ø¼ÒÀÇ À¯¹«¸¦ Á¶»çÇÏ±æ ¿øÇÑ´Ù¸é empty() ¸¦ »ç¿ëÇϵµ·Ï ÇÏÀÚ.

2.1.3.4 ±âŸ ÇÔ¼ö
swap()À» Á¦°øÇÑ´Ù. À̰ÍÀ» ÀÌ¿ëÇÏ¸é ¿ä¼Ò¸¦ µ¤¾î¾µ¼ö ÀÖ´Ù.
void swap(map&)                 
 
count()¸¦ »ç¿ëÇϸé ÇØ´ç key °¡ ¸î°³ÀÇ °ª¸¦ °¡Áö°í ÀÖ´ÂÁö È®ÀÎÇÒ¼ö ÀÖ´Ù. ±×·¯³ª map ¿¡¼­´Â ÇϳªÀÇ key ¿¡ ÇϳªÀÇ °ª¸¸À» °¡Áö°Ô µÇ¹Ç·Î, key ÀÇ Á¸ÀçÀ¯¹«¸¦ ÆÄ¾ÇÇÏ´ÂÁ¤µµ·Î¸¸ »ç¿ë ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ÇϳªÀÇ Å°°¡ ¿©·¯°³ÀÇ °ªÀ» °¡Áú¼ö ÀÖ´Â multimap ¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.

2.2 multimap

2.2.1 Ư¡

key ¸¦ Áߺ¹µÈ´Ù´Â Á¡À» Á¦¿ÜÇϰí map °ú µ¿ÀÏÇÑ Æ¯Â¡À» °¡Áø´Ù.

2.2.2 ¼±¾ð

multimap ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ¼ö ÀÖ´Ù.

Ç¥ 2. ÅÛÇø´ Parameters
Parameter ¼³¸í ±âº»°ª
Key map ÀÇ key
Data Key °¡ °¡¸®Å°´Â µ¥ÀÌŸ
Compare Key °¡ Á¤·ÄµÇ±â À§ÇØ»ç¿ëµÇ´Â Å©±â ºñ±³ÇÔ¼öÀÌ´Ù. ù¹øÂ° ¾Æ±Ô¸ÕÆ®°¡ 2¹øÂ° ¾Æ±Ô¸ÕÆ®º¸´Ù ÀÛÀ¸¸é true ¸¦ ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇϵµ·Ï ¸¸µç´Ù. less<key>
Alloc multimapÀÇ ÇÒ´ç±â map Àº ÀÌ ÇÒ´ç±â¸¦ ÅëÇØ¼­ ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù. alloc

2.2.3 ÀÚÁÖ»ç¿ëÇÏ´Â ÇÔ¼ö

±âº»ÀûÀ¸·Î map °ú µ¿ÀÏÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ´Ù¸¸ µ¿ÀÏÇÑ Å°¸¦ °¡Áö°Ô µÊÀ¸·Î À̸¦ Áö¿øÇϱâ À§ÇÑ Ãß°¡ÀûÀÎ ÇÔ¼ö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ¶ÇÇÑ map ¿Í °°Àº namekey = value; ¿Í °°Àº »ðÀÔÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. insert ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ »ðÀÔÇØ¾ß ÇÑ´Ù.
#include <map> 
struct ltstr 
{ 
   bool operator()(const char* s1, const char* s2) const 
   { 
      return strcmp(s1, s2) < 0; 
   } 
}; 
 
int main() 
{ 
    multimap<const char*, int, ltstr> m; 
 
    m.insert(pair<const char* const, int>("a", 1)); 
    m.insert(pair<const char* const, int>("a", 2)); 
    m.insert(pair<const char* const, int>("b", 3)); 
    m.insert(pair<const char* const, int>("c", 4)); 
    m.insert(pair<const char* const, int>("a", 5)); 
} 
 
ÇϳªÀÇ key °¡ ¿©·¯°³ÀÇ °ªÀ» °¡Áú¼ö ÀÖÀ½À¸·Î, key °¡ ¸î°³ÀÇ °ªÀ» °¡Áö°í ÀÖ´ÂÁö È®ÀÎÇÒ¼ö ÀÖ´Â ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù. count()ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¸î°³ÀÇ °ªÀ» °¡Áö°í ÀÖ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌÇÔ¼öµµ map ¿¡¼­ »ç¿ëÇÒ¼ö ÀÖ°ÚÁö¸¸, map ¿¡¼­ÀÇ ¿ëµµ¶ó¸é ã±â¿øÇÏ´Â key °¡ ÀÖ´ÂÁö ¾ø´ÂÁö Á¤µµ°¡ µÉ°ÍÀÌ´Ù.
size_type count(const key_type &k); 
 
ŰÀÇ °ªÀ» °¡Áö°í ¿À±â À§Çؼ­ find()·Î´Â ºÎÁ·ÇÒ°ÍÀÌ´Ù. find ´Â ´ÜÁö óÀ½¿¡ ÀÏÄ¡µÈ key ÀÇ iterator °ª¸¸À» µ¹·ÁÁÙ°ÍÀ̱⠶§¹®ÀÌ´Ù. ±×·¡¼­ lower_bound()¿Í upper_bound ¶ó´Â ÇÔ¼ö°¡ Áß¿äÇÏ°Ô »ç¿ëµÈ´Ù. (ÀÌµé µÎ ÇÔ¼ö´Â map ¿¡¼­µµ »ç¿ëÇÒ¼ö ÀÖÁö¸¸ map ¿¡¼­´Â °ÅÀÇ »ç¿ëÇÒ ÀÏÀÌ ¾ø´Ù.)
iterator lower_bound(const key_type& k); 
const_iterator lower_bound(const key_type& k) const; 
iterator upper_bound(const key_type& k);   
const_iterator upper_bound(const key_type& k) const; 
 
¿¹¸¦ µé¾î key "a" °¡ °¡Áö´Â ¸ðµç °ªÀ» °¡Á®¿À±æ ¿øÇÑ´Ù¸é
multimap<const char*, int, ltstr>::iterator start; 
multimap<const char*, int, ltstr>::iterator end; 
 
start = m.lower_bound("a"); 
end = m.upper_bound("a"); 
 
while(start != end) 
{ 
    cout << start->first << ";" << start->second << endl; 
    *start++; 
} 
 

À§ÀÇ ÄÚµå´Â count()¿Í find()¸¦ ÀÌ¿ëÇÑ ÄÚµå·Î ¹Ù²Ü ¼ö ÀÖ´Ù.
multimap<const char*, int, ltstr>::iterator start; 
start = m.find("a") ; 
int count = m.count("a"); 
for (int i = 0; i < count; i++) 
{ 
    cout << start->first << ":"<< start->second << endl; 
    *start++; 
} 
 

2.3 set

2.3.1 Ư¡

map, multimap °ú ´Þ¸® set Àº "Ű"°¡ °ð "°ª" À̵ȴÙ. Á¤·ÄµÇ´Â list ¿Í ¸Å¿ì ºñ½ÁÇÏ´Ù.

set Àº Ű´Â À¯ÀÏÇØ¾ß ÇÑ´Ù. ¸¸¾à µ¿ÀÏÇÑ key ¸¦ insert ÇÏ°Ô µÈ´Ù¸é, µ¤¾î¾²°Ô µÈ´Ù.

set Àº ƯÈ÷ includes, set_union, set_intersection, set_difference ¿Í °°Àº ÁýÇÕ°ü·Ã ¾Ë°í¸®Áò°ú ÀÚÁÖ »ç¿ëµÈ´Ù. ¿Ö³ÄÇϸé list ¿Í ´Þ¸® set Àº ±âº»ÀûÀ¸·Î ÄÁÅ×À̳ÊÀÇ ¿ä¼ÒµéÀÌ Sort µÇ¾î¼­ ÀúÀåµÇ´Â Sorted Associative Containers ·Î½á, ÀÌµé ¾Ë°í¸®ÁòÀ» ¸Å¿ì È¿À²ÀûÀ¸·Î Àû¿ë½Ãų¼ö Àֱ⠶§¹®ÀÌ´Ù(¾Ë°í¸®Áò¿¡ ´ëÇØ¼­´Â ³ªÁß¿¡ ´Ù·ç°Ú´Ù.).

´ÙÀ½Àº set_union À» ÀÌ¿ëÇÏ¿© µÎ°³ÀÇ set ÄÁÅ×À̳ÊÀÇ ÇÕÁýÇÕÀ» ±¸ÇÏ´Â ¿¹Á¦ÀÌ´Ù.
#include <set> 
#include <algorithm> 
#include <vector> 
 
struct ltstr 
{ 
  bool operator()(const char* s1, const char* s2) const 
  { 
    return strcmp(s1, s2) < 0; 
  } 
}; 
 
int main() 
{ 
    set<char *, ltstr> mydata; 
    set<char *, ltstr> mydata2; 
    set<char *, ltstr> mydata3; 
 
    vector<char *> myunion; 
 
    mydata.insert("a"); 
    mydata.insert("z"); 
    mydata.insert("b"); 
    mydata.insert("c"); 
    mydata.insert("f"); 
    mydata.insert("g"); 
    mydata.insert("d"); 
 
    mydata2.insert("k"); 
    mydata2.insert("o"); 
    mydata2.insert("e"); 
 
    set_union(mydata.begin(), mydata.end(), mydata2.begin(), mydata2.end(), 
                back_inserter(myunion), ltstr()); 
 
    for (int i = 0; i < myunion.size(); i++) 
    { 
        cout << myunion[i] << endl; 
    } 
} 
 

2.3.2 ¼±¾ð

Sequence ÄÁÅ×À̳ÊÀÇ ¼±¾ð¿¡ ´ÜÁö Á¤·ÄÀ» À§ÇÑ, ÇÔ¼ö¸¸ Çϳª Ãß°¡µÇ¾ú´Ù°í º¸¸é µÈ´Ù.

Ç¥ 3. ÅÛÇø´ Parameters
Parameter ¼³¸í ±âº»°ª
Key set ÀÇ key ÀÌ´Ù.
Compare set ¿ä¼Ò°¡ Á¤·ÄµÇ±â À§ÇØ»ç¿ëµÇ´Â Å©±â ºñ±³ÇÔ¼öÀÌ´Ù. ù¹øÂ° ¾Æ±Ô¸ÕÆ®°¡ 2¹øÂ° ¾Æ±Ô¸ÕÆ®º¸´Ù ÀÛÀ¸¸é true ¸¦ ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇϵµ·Ï ¸¸µç´Ù. less<key>
Alloc setÀÇ ÇÒ´ç±â ÀÌ´Ù. set Àº ÀÌ ÇÒ´ç±â¸¦ ÅëÇØ¼­ ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù. alloc

set µµ Á¤·Ä ¿¬°ü ÄÁÅ×ÀÌ³Ê À̹ǷΠ¿ø¼Ò¸¦ Á¤·Ä ÇÒ ¼ö ÀÖµµ·Ï ºñ±³ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖ¾î¾ß ÇÑ´Ù. ¹°·Ð int, string °ú °°Àº ŸÀÔÀÇ ¿ø¼Ò¸¦ ÄÁÅ×À̳ʿ¡ ÀûÀç ÇÒ ¶§´Â ±»ÀÌ ºñ±³ÇÔ¼ö¸¦ Á¤ÀÇÇÒ Çʿ䰡 ¾øÀ»°ÍÀÌ´Ù.

2.3.3 ÀÚÁÖ »ç¿ëµÇ´Â ÇÔ¼öµé

¿ª½Ã ´Ù¸¥ ÄÁÅ×À̳ʵé°ú Áߺ¹µÇ´Â ºñ½ÁÇÑ ÀÏÀ» ÇÏ´Â °°Àº À̸§ÀÇ ÇÔ¼öµéÀÌ ¸¹À¸¹Ç·Î, ÀÍÈ÷°í »ç¿ëÇϴµ¥ ¾î·Á¿òÀÌ ¾øÀ»°ÍÀÌ´Ù.

2.3.3.1 À§Ä¡ Á¢±Ù °ü·Ã
map ¿Í ¸¶Âù°¡Áö·Î "÷ÀÚ" Á¢±ÙÀÌ ºÒ°¡´ÉÇϹǷΠiterator ¸¦ ÅëÇØ¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù. begin()°ú end()¸¦ »ç¿ëÇØ¼­ °¢°¢ ÄÁÅ×À̳ÊÀÇ Ã³À½°ú ¸¶Áö¸·ÀÇ À§Ä¡¸¦ µÇµ¹·ÁÁÙ¼ö ÀÖ´Ù.
iterator begin(); 
iterator end(); 
 

¾Æ·¡´Â »ç¿ë ¿¹ÀÌ´Ù.
{[{#!plain
#include <set>
struct ltstr
{
bool operator()(const char *s1, const char *s2) const
{
return strcmp(s1, s2) < 0;
}
};

int main()
{
set<char *, ltstr> mydata;
mydata.insert("a");
mydata.insert("b");
mydata.insert("c");

set<char *, ltstr>::iterator mi = mydata.begin();

while(mi != mydata.end())
{
cout << *mi << endl;
  • mi++;
  • }
    }
    }}}
    ƯÁ¤Å°ÀÇ À§Ä¡¸¦ ¾Ë°í ½ÍÀ»¶§´Â find() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌÇÔ¼ö¸¦ »ç¿ëÇϸé ÇØ´çŰÀÇ À§Ä¡¸¦ °¡¸®Å°´Â iterator ¸¦ ¸®ÅÏÇÑ´Ù. ¸¸¾à ã´Â °ªÀÌ ¾ø´Ù¸é NULL À» ¸®ÅÏÇÑ´Ù.
    iterator find(const key_type &k) const 
     
    2.3.3.2 »ðÀÔ / »èÁ¦ °ü·Ã
    »ðÀÔÀ» À§Çؼ­ insert()¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ¸¸¾à¿¡ µ¿ÀÏÇÑ Å°°¡ ÄÁÅ×ÀÌ³Ê ¾È¿¡ ÀÖ´Ù¸é °ãÄ¡°Ô µÇ°í, ±×·¸Áö ¾Ê´Ù¸é insert ÇÏ°Ô µÈ´Ù. insert()ÇÒ¶§ ¿ø¼Ò´Â ºñ±³ÇÔ¼ö¿¡ ÀÇÇØ¼­ ÀÚµ¿ÀûÀ¸·Î Á¤·ÄÀÌ µÈ´Ù.
    pair<iterator, bool> insert(const value_type& x) 
     
    »èÁ¦¸¦ À§Çؼ­ erase() ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
    void erase(iterator pos); 
    size_type erase(const key_type& k); 
    void erase(iterator first, iterator last); 
     
    key °ªÀ¸·Î Áö¿ï¼ö ÀÖÀ¸¸ç, iterator ·Î ƯÁ¤ÇÑ À§Ä¡¸¦ ÁöÁ¤Çϰųª, ƯÁ¤ÇÑ ¹üÀ§³»(first ¿Í last)ÀÇ ¿ø¼Ò¸¦ »èÁ¦ÇÒ¼ö ÀÖ´Ù. ¸ðµç ¿ø¼Ò¸¦ »èÁ¦Çϱ⠿øÇÑ´Ù¸é clear()¸¦ »ç¿ëÇÑ´Ù.
    void clear() 
     
    2.3.3.3 ¿ø¼ÒÀÇ Å©±â °ü·Ã
    ÇöÀç ÄÁÅ×À̳ʿ¡ Æ÷ÇÔµÈ ¿ø¼ÒÀÇ Å©±â¸¦ ¾Ë±â À§Çؼ­ »ç¿ëÇÑ´Ù.
    size_type size() const; 
    bool empty() const; 
     
    ¿ø¼Ò°¡ ÀÖ´ÂÁö ¾ø´ÂÁö¸¸ È®ÀÎÇϱ⠿øÇÑ´Ù¸é empty()¸¦ »ç¿ëÇϵµ·Ï ÇÏÀÚ. À̿ܿ¡µµ count()¶ó´Â ÇÔ¼ö°¡ ÀÖ´Ù. À̰ÍÀº µ¿ÀÏÇÑ key °ªÀ» °¡Áö´Â ¿ø¼Ò°¡ ¸î°³ÀÖ´ÂÁö¸¦ °Ë»çÇϰíÀÚ ÇÒ¶§ »ç¿ëÇϴµ¥, set Àº Çѹø¿¡ ÇϳªÀÇ key ¸¸ °¡Áú¼ö ÀÖÀ¸¹Ç·Î º°·Î »ç¿ëÇÒ Çʿ䰡 ¾øÀ»°ÍÀÌ´Ù. À̰ÍÀº multiset ÄÁÅ×À̳ʿ¡ À¯¿ëÇÏ°Ô »ç¿ëµÉ¼ö ÀÖÀ»°ÅÀÌ´Ù.

    2.4 multiset

    2.4.1 Ư¡

    ÇϳªÀÇ Å° °ª¸¸À» °¡Áú¼ö ÀÖ´Â set ¿¡ ºñÇØ¼­ µ¿ÀÏÇÑ ¿©·¯°³ÀÇ Å°°ªÀ» °¡Áú¼ö ÀÖ´Ù. ±× Á¡À» Á¦¿ÜÇϰí´Â set °ú µ¿ÀÏÇÏ°Ô »ç¿ëÇÏ¸é µÈ´Ù.

    set °ú ¸¶Âù°¡Áö·Î ÁýÇÕ°ü·Ã ¾Ë°í¸®Áò°ú ÇÔ±ú À¯¿ëÇÏ°Ô »ç¿ëµÉ¼ö ÀÖ´Ù.
    #include <algorithm> 
    #include <vector> 
    #include <set>  
    int main() 
    { 
        const int N = 10; 
        int a[N] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0}; 
        int b[N] = {4, 4, 2, 4, 2, 4, 0, 1, 5, 5}; 
     
        multiset<int> A(a, a+N); 
        multiset<int> B(b, b+N); 
        vector<int> C; 
     
        set_union(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C)); 
     
        for (int i = 0; i < C.size(); i++) 
            cout << C[i] << endl; 
     
        C.clear(); 
        set_intersection(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C)); 
        cout << "==========" <<endl; 
        for (int i = 0; i < C.size(); i++) 
            cout << C[i] << endl; 
    } 
     

    2.4.2 ÀÚÁÖ »ç¿ëµÇ´Â ÇÔ¼ö

    set °ú µ¿ÀÏÇÏ´Ù. ´Ù¸¸ count() ÇÔ¼ö¿Í lower_bound()¿Í upper_bound()µîÀÇ ÇÔ¼öµîÀ» Á»´õ Çö½ÇÀûÀ¸·Î »ç¿ëÇÒ¼ö ÀÖ´Ù.
    size_type count(const key_type& k) const 
    iterator lower_bound(const key_type& k) const 
    iterator upper_bound(const key_type& k) const 
     

    3 °á·Ð

    ÀÌ»ó Association Container ¿¡ ´ëÇÑ °£·«Çѳ»¿ë¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù. »ç½ÇÀº ±×·²µíÇÑ ¿¹Á¦¸¦ Çϳª ¸¸µé¾î¼­ ¼³¸íÇÏ°í ½Í¾úÁö¸¸ ÄÁÅ×À̳ʿ¡ ´ëÇÑ ³»¿ëÀÚü°¡ ¹æ´ëÇÑ °ü°è·Î »ç¿ë¹æ¹ýÀ» ÀÍÈ÷´Âµ¥ ¹«¸® ¾øÀ» Á¤µµÀÇ ÄÚµå·Î ¼³¸íÀ» ´ë½ÅÇÏ¿´´Ù.

    ÀÌ ´ÙÀ½Àå¿¡¼­´Â Áö±Ý±îÁö STL À» ´Ù·ç¸é¼­ ÀÚÁÖ º¸¾Æ¿Ô´ø iterator ¿Í ¾Ë°í¸®Áò¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ(¿ì¸®´Â ÀÌ¹Ì ¾Ë°í¸®ÁòÀ» À̹øÀå¿¡¼­ »ç¿ëÇß´Ù. set_union °ú °°Àº °ÍµéÀÌ ±×°ÍÀÌ´Ù).

    category_C++
    category__2
    EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.