๐Ÿ“– C๋ž‘ C++

C++ std::map์„ ์‚ฌ์šฉํ•ด๋ณด์ž

bell22 2021. 1. 7. 19:56

C ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๋Š๋ผ๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค

์ •๋ง,, ์ž๋ฃŒ๊ตฌ์กฐ ๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋ผ๋Š”๊ฑฐ๋‹ค (๋‚˜๋งŒ ๊ทธ๋Ÿด์ง€๋„ ๋ชจ๋ฅธ๋‹ค)

๊ทธ๋ž˜์„œ C++์—์„œ STL์ด ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋„ˆ๋ฌด ํŽธ๋ฆฌํ–ˆ๋‹ค

 

cf) STL (Standard Template Library)

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, std:: namespace๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค

 

ํ•˜์ง€๋งŒ ํ•œ ๋‘๊ฐœ ์‚ฌ์šฉํ•  ์ˆ˜๋ก, ์ž‘์€๊ฑฐ ํ•˜๋‚˜๋„ ํ—ท๊ฐˆ๋ ค์„œ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค

 

- map ์ •์˜ ๋ฐฉ๋ฒ•

- map ์š”์†Œ ์‚ฝ์ž…

- map ์š”์†Œ ๊ฒ€์ƒ‰

- map ์š”์†Œ ์‚ญ์ œ

- map ์ˆœํšŒ

- map ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ

 


0. map์ด ๋ญ”๊ฐ€์š”?

์œ„ํ‚ค๋ฐฑ๊ณผ: ๋‹ค์ˆ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ, map์€ ๊ณ ์ฐจ ํ•จ์ˆ˜๋กœ์„œ ์ „ํ•ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ(apply)ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•œ๋‹ค.

KEY์™€ VALUE ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค

์‚ฝ์ž…ํ•  ๋•Œ๋Š” KEY์™€ VALUE๋ฅผ ๊ฐ™์ด ๋„ฃ์–ด์ฃผ๊ณ 

๊ฒ€์ƒ‰์ด๋‚˜ ์ˆœํšŒ์˜ ๊ฒฝ์šฐ์—๋Š” KEY๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ์–ป์–ด์„œ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค

 

1. map ์ •์˜ ๋ฐฉ๋ฒ•

๋‚˜๋Š” ์ฒ˜์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•ญ์ƒ ๊ณ ๋ฏผ๋˜๋Š”๊ฒŒ ์žˆ๋‹ค

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜์Œ์— ์จ์•ผํ•˜๋Š”๊ฑฐ์ง€? ์ด ๊ณ ๋ฏผ์„ ํ•ญ์ƒ ํ•œ๋‹ค,,

 

#include <iostream>
#include <map>
using namespace std;

int main(void)
{
    map<int, string> testMap;

    return 0;
}

 

์ด๋ ‡๊ฒŒ๋งŒ ํ•ด์ฃผ๋ฉด ์ด๋ฏธ ๋‹ค ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค

์‹œ์ž‘์ด ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

 

ํ—ค๋”๋Š” #include <map>์„ ํฌํ•จํ•ด์ฃผ๋ฉด ๋œ๋‹ค

 

map์€ KEY์™€ VALUE๋กœ ์ด๋ค„์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๋ณด๋ฉด ๋ชจ์–‘์€ ์•Œ๊ธฐ ์‰ฝ๋‹ค

map<KEY, VALUE>

๋ฌผ๊ตฌ๋‚˜๋ฌดํ•˜๊ณ  ๋ด๋„ ์ด ๋ชจ์–‘์ผํ…Œ๋‹ˆ๊นŒ ๋ง์ด๋‹ค

์œ„์˜ KEY, VALUE ์ž๋ฆฌ์— key๋กœ ์“ธ ์ž๋ฃŒํ˜•๊ณผ value๋กœ ์“ธ ์ž๋ฃŒํ˜•๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋์ด๋‹ค

 

 

2. map ์š”์†Œ ์‚ฝ์ž…

๋งŒ๋“  map์— ๊ฐ’์„ ๋„ฃ์–ด๋ณด์ž

 

#include <iostream>
#include <map>
using namespace std;

int main(void)
{
    map<int, string> testMap;

    /* 1. insert() */
    testMap.insert(pair<int, string>(1, "map1"));

    /* 2. operator[] */
    testMap[2] = "map2";

    return 0;
}

 

map์— ๊ฐ’์„ ๋„ฃ๋Š” ๋ฐฉ์‹์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค

- insert() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„ฃ๊ธฐ

- operator[] ๋ฐฉ์‹์œผ๋กœ ๋„ฃ๊ธฐ

 

๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์ฐจ์ด๋ฅผ ๋“ค์ž๋ฉด,

insert()๋Š” map์— ์š”์†Œ ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ 

operator[] ๋ฐฉ์‹์€ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •์ด ๋‘˜๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค 

(return ๊ฐ’์€ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ๋‹ค)

 

๋‚˜๋Š” operator[] ๋ฐฉ์‹์„ ๋งŽ์ด ์“ด๋‹ค.

์™œ๋ƒ๋ฉด ์ด๋ฏธ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์žˆ์„ ๋•Œ, ์ตœ์‹ ์˜ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ฃผ๊ณ  ์‹ถ์€๋ฐ

inser()๋Š” key ๊ฐ’์ด ์ค‘๋ณต๋˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฑ‰๋Š”๋‹ค;; ์•ˆ ๋„ฃ์–ด์ง!

๋ฌผ๋ก , ์ƒํ™ฉ์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ ๋˜๋Š”๊ฑฐ๊ฐ€ ์•ˆ ์ข‹์„ ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‹ˆ๊นŒ ์„ ํƒํ•ด์„œ ์“ฐ๋ฉด ๋œ๋‹ค

 

 

3. map ์š”์†Œ ๊ฒ€์ƒ‰

๊ทธ๋Ÿฌ๋ฉด ๋„ฃ์€ ๊ฐ’์„ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ์–ด์ง„๋‹ค

 

#include <iostream>
#include <map>
using namespace std;

int main(void)
{
    map<int, string> testMap;

    testMap.insert(pair<int, string>(1, "map1"));
    testMap[2] = "map2";

    map<int, string>::iterator iter;
    iter = testMap.find(1);
    if( iter != testMap.end() )
    {
        cout << iter->first << "\n";
        cout << iter->second << "\n";
    }

    return 0;
}

 

๋ญ”๊ฐ€ ๋ณต์žกํ•ด๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค

map<int, string>::iterator iter;

์—ฌ๊ธฐ๊ฐ€ ์กฐ๊ธˆ ์ญ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, iterator๋Š” ๋‹ค์Œ์— ์ž์„ธํžˆ ๋ณด๋ ค๊ณ  ํ•œ๋‹ค

map์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” iterator(๋ฐ˜๋ณต์ž) ๋ผ๊ณ ๋งŒ ์•Œ์•„๋‘์ž

 

์ด ๋ฐ˜๋ณต์ž๊ฐ€ ์ƒ๋‹นํžˆ ์žฌ๋ฐŒ๋Š” ์นœ๊ตฌ์ธ๋ฐ, ๋˜๊ฒŒ ๊ฐ€์‹œ์ ์ธ? ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

์œ„์˜ ์˜ˆ์‹œ์—์„œ ์“ฐ๊ณ  ์žˆ๋Š” find()์™€ end() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

C์—์„œ ์‚ฌ์šฉํ•˜๋Š” for๋ฌธ์ด๋‚˜ while๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์š”์†Œ์— ๋ฐ˜๋ณตํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

 

์•„๋ž˜ 3๊ฐ€์ง€๋งŒ ๊ธฐ์–ตํ•ด๋‘๋ฉด iterator๋ฅผ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

 

- find() ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ์ฐพ๊ณ ์ž ํ•˜๋Š” KEY์˜ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค

- iterator->first๋Š” map์˜ KEY ๊ฐ’

- iterator->second๋Š” map์˜ VALUE ๊ฐ’

 

 

//map<int, string>::iterator iter;
auto iter = testMap.find(1);
if( iter != testMap.end() )
{
   cout << iter->first << "\n";
   cout << iter->second << "\n";
}

 

๋‚˜๋Š” ๋ณดํ†ต auto ์ž๋ฃŒํ˜•์„ ์จ์„œ ์‚ฌ์šฉํ•œ๋‹ค

auto๋Š” ์ง„์งœ ๋„ˆ๋ฌด ์ข‹๋‹ค

 

4. map ์š”์†Œ ์‚ญ์ œ

 

์‚ญ์ œ ๋ฐฉ๋ฒ•์€ insert()๋ฅผ ์•Œ์•˜๋‹ค๋ฉด, ์˜ˆ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค

์š”์†Œ๋ฅผ erase ํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ฑฐ๋‹ˆ๊นŒ, erase()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค

 

testMap.erase(1);

 

์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” KEY ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค

๊ทธ๋Ÿฌ๋ฉด map์— ์žˆ๋Š” ์š”์†Œ๋“ค ์ค‘, KEY์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค. KEY๋„ ๊ฐ™์ด ์‚ญ์ œ๋œ๋‹ค

 

๋ชจ๋“ ๊ฑธ ๋‹ค ์ง€์šฐ๊ณ  ์‹ถ์œผ๋ฉด

testMap.clear();

clear() ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค

 

5. map ์ˆœํšŒ

์ˆœํšŒ๋Š” ์—ญ์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐ˜๋ณต์ž๋ฅผ ํ†ตํ•ด ๋ด์•ผํ•  ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋ถ„์ด ๋“ ๋‹ค

 

#include <iostream>
#include <map>
using namespace std;

int main(void)
{
    map<int, string> testMap;

    testMap.insert(pair<int, string>(1, "map1"));
    testMap[2] = "map2";

    auto iter = testMap.find(1);
    if( iter != testMap.end() )
    {
        cout << iter->first << "\n";
        cout << iter->second << "\n";
    }

    for( iter = testMap.begin(); iter != testMap.end(); iter++ )
    {
        cout << iter->first << "\n";
        cout << iter->second << "\n";
    }

    return 0;
}

 

์ˆœํšŒ๋Š” for๋ฌธ๊ณผ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

for( iter = testMap.begin(); iter != testMap.end(); iter++)

begin() ๋ถ€ํ„ฐ ~~ end() ๊นŒ์ง€ ์š”์†Œ ์ ‘๊ทผ์„ ํ•˜๊ฒ ๋‹ค๋Š”๊ฑฐ๋‹ค

 

 

6. map ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ

map์˜ ํฌ๊ธฐ๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด? size๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด?

์Šฌ์Šฌ ์ด์ œ ๋Š๋‚Œ์ด ์˜จ๋‹ค

 

testMap.size();

 

๊ทธ๋ ‡๋‹ค.. size() ํ•จ์ˆ˜๋ฅผ ์จ์ฃผ๋ฉด ๋œ๋‹ค

๋ณ„๊ฑธ ๋‹ค ๋งŒ๋“ค์–ด ๋†“์€ ๊ฒƒ ๊ฐ™๋‹ค

 


์‚ฌ์šฉ๋ฐฉ๋ฒ•๋งŒ ์šฐ์„  ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ,

์‚ฌ์‹ค map์ด๋‹ˆ,, set์ด๋‹ˆ,, ๋ฆฌ์ŠคํŠธ๋‹ˆ,, ์•Œ์•„์•ผํ• ๊ฑฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค

๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ํ•œ๋ฒˆ์— ์ •๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹์„ ๋“ฏ ํ•˜๋‹ค 

๊ท€์ฐฎ์•„์„œ ๊ทธ๋Ÿฐ๊ฑฐ ์•„๋‹˜

 

 


์œ„ํ‚ค๋ฐฑ๊ณผ

ko.wikipedia.org/wiki/Map_(%EA%B3%A0%EC%B0%A8_%ED%95%A8%EC%88%98)

 

Map (๊ณ ์ฐจ ํ•จ์ˆ˜) - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ๋‹ค์ˆ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ, map์€ ๊ณ ์ฐจ ํ•จ์ˆ˜๋กœ์„œ ์ „ํ•ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ(apply)ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜

ko.wikipedia.org