ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
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 map2.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
#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 multimap2.2.1 Ư¡
key ¸¦ Áߺ¹µÈ´Ù´Â Á¡À» Á¦¿ÜÇϰí map °ú µ¿ÀÏÇÑ Æ¯Â¡À» °¡Áø´Ù. 2.2.2 ¼±¾ð
multimap ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ¼ö ÀÖ´Ù.
Ç¥ 2. ÅÛÇø´ Parameters
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++;
}
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 set2.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
set µµ Á¤·Ä ¿¬°ü ÄÁÅ×ÀÌ³Ê À̹ǷΠ¿ø¼Ò¸¦ Á¤·Ä ÇÒ ¼ö ÀÖµµ·Ï ºñ±³ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖ¾î¾ß ÇÑ´Ù. ¹°·Ð int, string °ú °°Àº ŸÀÔÀÇ ¿ø¼Ò¸¦ ÄÁÅ×À̳ʿ¡ ÀûÀç ÇÒ ¶§´Â ±»ÀÌ ºñ±³ÇÔ¼ö¸¦ Á¤ÀÇÇÒ Çʿ䰡 ¾øÀ»°ÍÀÌ´Ù. 2.3.3 ÀÚÁÖ »ç¿ëµÇ´Â ÇÔ¼öµé
¿ª½Ã ´Ù¸¥ ÄÁÅ×À̳ʵé°ú Áߺ¹µÇ´Â ºñ½ÁÇÑ ÀÏÀ» ÇÏ´Â °°Àº À̸§ÀÇ ÇÔ¼öµéÀÌ ¸¹À¸¹Ç·Î, ÀÍÈ÷°í »ç¿ëÇϴµ¥ ¾î·Á¿òÀÌ ¾øÀ»°ÍÀÌ´Ù. 2.3.3.1 À§Ä¡ Á¢±Ù °ü·Ã
map ¿Í ¸¶Âù°¡Áö·Î "÷ÀÚ" Á¢±ÙÀÌ ºÒ°¡´ÉÇϹǷΠiterator ¸¦ ÅëÇØ¼ Á¢±ÙÇØ¾ß ÇÑ´Ù. begin()°ú end()¸¦ »ç¿ëÇØ¼ °¢°¢ ÄÁÅ×À̳ÊÀÇ Ã³À½°ú ¸¶Áö¸·ÀÇ À§Ä¡¸¦ µÇµ¹·ÁÁÙ¼ö ÀÖ´Ù. iterator begin(); iterator end();
¾Æ·¡´Â »ç¿ë ¿¹ÀÌ´Ù. {[{#!plain #include <set> struct ltstr { };
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;
}}}} ƯÁ¤Å°ÀÇ À§Ä¡¸¦ ¾Ë°í ½ÍÀ»¶§´Â 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 multiset2.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 ¿¡ ´ëÇÑ °£·«Çѳ»¿ë¿¡ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù. »ç½ÇÀº ±×·²µíÇÑ ¿¹Á¦¸¦ Çϳª ¸¸µé¾î¼ ¼³¸íÇÏ°í ½Í¾úÁö¸¸ ÄÁÅ×À̳ʿ¡ ´ëÇÑ ³»¿ëÀÚü°¡ ¹æ´ëÇÑ °ü°è·Î »ç¿ë¹æ¹ýÀ» ÀÍÈ÷´Âµ¥ ¹«¸® ¾øÀ» Á¤µµÀÇ ÄÚµå·Î ¼³¸íÀ» ´ë½ÅÇÏ¿´´Ù.
|
|
||||||||||||||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|