C++

[C++ STL] map ์ปจํ…Œ์ด๋„ˆ

HEY__ 2021. 8. 4. 16:19
728x90

๐Ÿ’ก map์˜ ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ํŠน์ง•

 

1. ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ ์ค‘ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ

2. ์›์†Œ๋ฅผ key์™€ value์˜ ์Œ(pair ๊ฐ์ฒด)์œผ๋กœ ์ €์žฅ

3. key๋Š” ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์—์„œ ์œ ์ผ (์ฆ‰, ์ค‘๋ณต key ํ—ˆ์šฉ X)

4. ๊ธฐ๋ณธ ์ •๋ ฌ ๋ฐฉ๋ฒ•์€ less์ด๋ฉฐ, key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

 

5. set๊ณผ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๊ฑฐ์˜ ์œ ์‚ฌ

6. [] ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ key ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” value์— ์ ‘๊ทผ -> ์‚ฝ์ž… or ์ˆ˜์ •์ด ๊ฐ€๋Šฅ

7. insert()๋Š” pair ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ

 


 

๐Ÿ’ก ์ƒ์„ฑ์ž

 

1. ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•

// pair๊ฐ์ฒด์˜ first:key  second:value
map<int, int> m;

๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€์€ less๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด ์„ธ ๋ฒˆ์งธ์ธ์ž๋กœ ์ •๋ ฌ ๊ธฐ์ค€์„ ๋”ฐ๋กœ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ •๋ ฌ๊ธฐ์ค€์€ less๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

<>์•ˆ์— ์ˆœ์„œ๋Œ€๋กœ key์˜ ์ž๋ฃŒํ˜•๊ณผ value์˜ ์ž๋ฃŒํ˜•์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

2. ์ •๋ ฌ ๊ธฐ์ค€ ๋ณ€๊ฒฝ

๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€ less๋ฅผ greater๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ์„ธ ๋ฒˆ์งธ ์ธ์ž๋กœ greater<์ž๋ฃŒํ˜•>์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€, ์ •๋ ฌ์€ key ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— <> ์‚ฌ์ด์— key์˜ ์ž๋ฃŒํ˜•์„ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

// pair๊ฐ์ฒด์˜ first:key  second:value
// key์˜ ์ž๋ฃŒํ˜•์ด intํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์—, greater<int>
map<int, float, greater<int>> m;

 


 

๐Ÿ’ก ์‚ฝ์ž…

 

1. insert(pair ๊ฐ์ฒด)

key์™€ value๋ฅผ pair๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

// insert()์— key์™€ value๋ฅผ pair๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ
// pair ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€

// 1.
m.insert(pair<int, float> (5, 2.1));
// 2.
m.insert(make_pair(5, 2.1));

 

insert() ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์ €์žฅํ•œ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž์™€ ์‚ฝ์ž… ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” bool๊ฐ’์„ pair ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;
    pair<map<int, float>::iterator, bool> pr;

    pr = m.insert(make_pair(1, 1.1));
    // ์‚ฝ์ž… ์„ฑ๊ณต!
    if(pr.second){
        // pr.first๋Š” ์‚ฝ์ž…ํ•œ ์œ„์น˜์˜ ๋ฐ˜๋ณต์ž์ด๋ฏ€๋กœ, ์ด๋ฅผ ํ†ตํ•ด key์™€ value์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
        cout << "key: " << pr.first->first << endl;
        cout << "value: " << pr.first->second;
    }
    else if(!pr.second){
        cout << "key๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค" << endl;
    }

    // ์ด๋ฏธ ์กด์žฌํ•˜๋Š” key๋ฅผ ์‚ฝ์ž…ํ•˜๋ฏ€๋กœ ์‚ฝ์ž… ์‹คํŒจ
    pr = m.insert(make_pair(1, 2.5));
    if(pr.second){
        // pr.first๋Š” ์‚ฝ์ž…ํ•œ ์œ„์น˜์˜ ๋ฐ˜๋ณต์ž์ด๋ฏ€๋กœ, ์ด๋ฅผ ํ†ตํ•ด key์™€ value์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
        cout << "key: " << pr.first->first << endl;
        cout << "value: " << pr.first->second;
    }
    else if(!pr.second){
        cout << "key๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค" << endl;
    }

[์ถœ๋ ฅ ๊ฒฐ๊ณผ]

// pr = m.insert(make_pair(1, 1.1));
key: 1
value: 1.1

// pr = m.insert(make_pair(1, 2.5));
key๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค

 

2. [] ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ์‚ฝ์ž… & ๊ฐฑ์‹ 

  1) ์‚ฝ์ž…

    [ ]์•ˆ์— key ๊ฐ’์„, = ๋’ค์— ์‚ฝ์ž…ํ•˜๊ณ  ์‹ถ์€ value ๊ฐ’์„ ์ ์Šต๋‹ˆ๋‹ค.

    ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” key๊ฐ’์ด๋ผ๋ฉด ์›์†Œ(key: 1, value: 1.1)์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;

    // key: 1, value: 1.1 ์‚ฝ์ž…
    m[1] = 1.1;
    // key: 2, value: 2.3 ์‚ฝ์ž…
    m[2] = 2.3;

  2) ๊ฐฑ์‹ 

    ๋งŒ์ผ ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” key ๊ฐ’์ด๋ผ๋ฉด, ํ•ด๋‹น ์›์†Œ(key: 1, value: 1.1)์˜ value๋ฅผ 1.5๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;

    // key: 1, value: 1.1 ์‚ฝ์ž…
    m[1] = 1.1;
    // key: 1์— ํ•ด๋‹นํ•˜๋Š” value ๊ฐ’ ๊ฐฑ์‹ 
    m[1] = 1.5;

 


 

๐Ÿ’ก ์ฐธ์กฐ

 

1. find(key)

key๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜๋ณต์ž(iterator)๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์ผ ์ฐพ๊ณ ์ž ํ•˜๋Š” key ๊ฐ’์ด ์—†๋‹ค๋ฉด end()๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ฐพ๊ณ ์ž ํ•˜๋Š” key๊ฐ’์„ ๋ฐœ๊ฒฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋ฐ˜๋ณต์ž๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;
    map<int, float>::iterator iter; // ๋ฐ˜๋ณต์ž

    m[1] = 1.1; // key: 1, value: 1.1 ์‚ฝ์ž…
   
    // ์ฐพ๊ณ ์‹ถ์€ key ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ
    iter = m.find(1);

    // ์›ํ•˜๋Š” key ๊ฐ’์„ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋ฐ˜๋ณต์ž๋กœ ๋ฐ˜ํ™˜
    if(iter != m.end()){
        cout << "์ฐพ๊ธฐ ์„ฑ๊ณต" << endl;
    }
    // ์›ํ•˜๋Š” key ๊ฐ’์ด ์—†๋‹ค๋ฉด end()์œ„์น˜ ๋ฐ˜ํ™˜
    else{
        cout << "์ฐพ๊ธฐ ์‹คํŒจ" << endl;
    }

 

2. count(key)

๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ value์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” key ๊ฐ’์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

key๊ฐ’์— ์žˆ๋Š” value์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ map์€ ์ค‘๋ณต key๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” 0 ํ˜น์€ 1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;
    
    m[1] = 1.1; // key: 1, value: 1.1 ์‚ฝ์ž…
    m[2] = 2.3; // key: 2, value: 2.3 ์‚ฝ์ž…

    // key 1์— value๊ฐ€ 1๊ฐœ ์žˆ์œผ๋ฏ€๋กœ 1 ๋ฐ˜ํ™˜
    int n1 = m.count(1);
    // key 3์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ 0 ๋ฐ˜ํ™˜
    int n2 = m.count(3);

 

3. empty()

ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น„์—ˆ๋Š”์ง€(์›์†Œ(key, value)๊ฐ€ ์žˆ๋Š”์ง€)์˜ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;

    m[1] = 1.1; // key: 1, value: 1.1 ์‚ฝ์ž…
    m[2] = 2.3; // key: 2, value: 2.3 ์‚ฝ์ž…

    cout << m.empty(); // false

 

4. size()

ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์— ์›์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;

    m[1] = 1.1; // key: 1, value: 1.1 ์‚ฝ์ž…
    m[2] = 2.3; // key: 2, value: 2.3 ์‚ฝ์ž…

    cout << m.size(); // return 2

 


 

๐Ÿ’ก ์ œ๊ฑฐ

 

1. erase(key)

์ง€์šฐ๊ณ ์ž ํ•˜๋Š” key๊ฐ’์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด, key ๊ฐ’์ด ๋งค๊ฐœ๋ณ€์ˆ˜์ธ ์›์†Œ๋ฅผ ์ฐพ์•„์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;

    m[1] = 1.1; // key: 1, value: 1.1 ์‚ฝ์ž…
    m[2] = 2.3; // key: 2, value: 2.3 ์‚ฝ์ž…

    // key๊ฐ’์œผ๋กœ 1์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์›์†Œ ์‚ญ์ œ ํ›„, ์„ฑ๊ณต ์—ฌ๋ถ€ ๋ฐ˜ํ™˜
    bool isDeleted = m.erase(1); 
    cout << isDeleted; // ์„ฑ๊ณต

 


2. clear()

ํ•ด๋‹น map ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์›์†Œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    map<int, float> m;

    m[1] = 1.1; // key: 1, value: 1.1 ์‚ฝ์ž…
    m[2] = 2.3; // key: 2, value: 2.3 ์‚ฝ์ž…

    m.clear(); // map ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์›์†Œ ์‚ญ์ œ
    cout << m.size(); // 0

 

 


 

๐Ÿ’ก map ์ปจํ…Œ์ด๋„ˆ ์ฃผ์š” ํŠน์ง• ์ •๋ฆฌ

 

1. ๋Œ€ํ‘œ์ ์ธ ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ์ด์ž ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ

2. ํŠน์ • ์ •๋ ฌ ๊ธฐ์ค€(default: less)์œผ๋กœ key๊ฐ€ ์ž๋™์œผ๋กœ ์ •๋ ฌ

3. key์™€ value๊ฐ€ ์ง์„ ์ง€์–ด ์›์†Œ๋ฅผ ์ด๋ฃน๋‹ˆ๋‹ค.

4. [] ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์›์†Œ ์ถ”๊ฐ€, ์ˆ˜์ •์ด ๊ฐ€๋Šฅ

5. ์ปจํ…Œ์ด๋„ˆ์˜ ์•ž, ๋’ค ์ฐธ์กฐ, ์ธ๋ฑ์Šค ์ฐธ์กฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ

6. ํ•ต์‹ฌ -> ๋น ๋ฅธ ์›์†Œ ์ฐพ๊ธฐ

   ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ ์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ๋ณต์žก๋„ ๋ณด์žฅ

 

 

 

์ฐธ๊ณ  ์ฑ… : ๋‡Œ๋ฅผ ์ž๊ทนํ•˜๋Š” C++ STL

728x90