C++ STL

MAP

Map container

  • ๋…ธ๋“œ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ  ๊ท ํ˜• ์ด์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ(๋ ˆ๋“œ๋ธ”๋ž™ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.)

  • key์™€ value๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ์ด๋Š” pair ๊ฐ์ฒด๋กœ ์ €์žฅ

  • Unique Key

    • key๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์ค‘๋ณต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ์ค‘๋ณต key๋Š” multimap์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • Ordered

    • map๋„ set๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฝ์ž…์ด ๋˜๋ฉด์„œ ์ž๋™์œผ๋กœ ์ •๋ ฌ์ด ๋œ๋‹ค.(default๋Š” less/์˜ค๋ฆ„์ฐจ์ˆœ)

  • ์—ฐ๊ด€์žˆ๋Š” ๋‘ ๊ฐ’์„ ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋˜, ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ map ์‚ฌ์šฉ๋ฒ•

๋ฉค๋ฒ„ํ•จ์ˆ˜

๊ธฐ๋Šฅ

map.size()

map ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด.

map.empty()

map์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธ.

map.begin()

map์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด.

map.end()

map์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด.

map[key] = value

map์— key๊ฐ€ key์ด๊ณ  value๊ฐ€ value์ธ ๋…ธํŠธ ์ถ”๊ฐ€

map.insert(make_pair(key,value))

map์— key๊ฐ€ key์ด๊ณ  value๊ฐ€ value์ธ ๋…ธํŠธ ์ถ”๊ฐ€

map.erase(key)

map์—์„œ ํ‚ค๊ฐ€ key์ธ ๋…ธ๋“œ ์‚ญ์ œ

map.find(key)

map์—์„œ ํ‚ค๊ฐ€ key์ธ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„, ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด.

map.count(key)

map์—์„œ ํ‚ค๊ฐ€ key์ธ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด.

iterator ์‚ฌ์šฉ๋ฐฉ๋ฒ•.

map<char,int>::iterator it;
//map์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ key์™€ value ์ถœ๋ ฅ
for(it = map.begin(); it != map.end(); it++)
    cout << it->first << ' ' << it->second << '\n';

//์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋œ๋‹ค.
for(auto it = m.begin(); it != m.end(); it++){
        cout << "key : " << it->first << " " << "value : " << it->second << '\n';
    }

Set

Set Container

  • key๋งŒ ์žˆ๋Š” map ํ˜น์€ ์ •๋ ฌ๋œ ์ง‘ํ•ฉ.(value๊ฐ€ ์—†๋Š” map์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.)

  • ํŠน์ • ๊ฐ’์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ Set ์‚ฌ์šฉ๋ฒ•

๋ฉค๋ฒ„ํ•จ์ˆ˜

๊ธฐ๋Šฅ

s.size()

s์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด

s.size()

s์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด

s.empty()

s์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธ

s.begin()

s์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด

s.end()

s์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด

s.insert(k)

s์— ๊ฐ’์ด k์ธ ๋…ธ๋“œ ์ถ”๊ฐ€

s.erase(k)

s์—์„œ ๊ฐ’์ด k์ธ ๋…ธ๋“œ ์‚ญ์ œ

s.find(k)

s์—์„œ ๊ฐ’์ด k์ธ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„, ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด (๊ฐ’์ด k์ธ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, s์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator ๋ฆฌํ„ด)

s.count(k)

s์—์„œ ๊ฐ’์ด k์ธ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด

ํŠน์ • key ์‚ญ์ œ

int toErase;
scanf("%d", &toErase);

it = s.find(toErase);

//์ง€์šธ ์›์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์›์†Œ์ผ ๋•Œ๋งŒ ์ง€์›€
if(it != s.end())
    s.erase(it);

vector

vector์—์„œ iterator๋ฅผ ํ†ตํ•œ ๋ฐ˜๋ณต ๋„์ค‘ ์š”์†Œ ์‚ญ์ œ.

for (vector<int>::iterator iter = v.begin(); iter == v.end();){ 
        if (iter->x==0/*์กฐ๊ฑด */){
            iter = v.erase(iter); 
        } else {
            iter++; 
        }
    }

BitSet

๋น„ํŠธ์—ฐ์‚ฐ์„ ์ž˜ ์ดํ•˜๊ณ  ์žˆ์„ ๋•Œ ๋น„ํŠธ์…‹ ๊นŒ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋น„ํŠธ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

ํ—ค๋”

#include <bitset>

๊ธฐ๋ณธ์ ์ธ Bitset ์‚ฌ์šฉ๋ฒ•

๋ฉค๋ฒ„ํ•จ์ˆ˜

๊ธฐ๋Šฅ

bitset<๊ฐœ์ˆ˜> ์ด๋ฆ„

bitset ์„ ์–ธ

bit.set()

์ „์ฒด ๋น„ํŠธ๋ฅผ 1๋กœ ์…‹ํŒ…

bit.set(n,true/false)

n+1๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ 1๋˜๋Š” 0์œผ๋กœ ์…‹ํŒ…

bit.reset()

์ „์ฒด ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ๋ฆฌ์…‹

bit.size()

bitset์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•œ๋‹ค.

bit.any()

๋น„ํŠธ์…‹ ์ค‘ ํ•˜๋‚˜๋ผ๋„ 1์ด๋ฉด 1์„ ๋ฐ˜ํ™˜, ๋ชจ๋‘ 0์ผ๋•Œ๋งŒ 0์„ ๋ฐ˜ํ™˜

bit.none()

๋น„ํŠธ์…‹์ค‘๋ชจ๋‘๊ฐ€ 0์ด์–ด์•ผ 1์„ ๋ฐ˜ํ™˜.

bit.flip()

์ „์ฒด ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „

bit.flip(n)

n+1๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „

bit.test(n)

n+1๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ๊ฒ€์‚ฌ(1์ธ์ง€ 0์ธ์ง€)

bit.to_string()

์ „์ฒด ๋น„ํŠธ๋ฅผ stringํ™” ์‹œํ‚จ๋‹ค.

bit.test[4]==bit[4]

๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

Reference

[C++/STL]map, set : https://sarah950716.tistory.com/6 bitset : https://www.crocus.co.kr/549

Last updated

Was this helpful?