๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” C++ STL ์ž๋ฃŒ๊ตฌ์กฐ map/set

2020. 8. 10. 00:10ใ†PROGRAMMING/C++ STL

 

 

 

[ STL ์ž๋ฃŒ๊ตฌ์กฐ map / set ]

 

STL array, vector, list๊ฐ€ ์—ฐ์† ์ปจํ…Œ์ด๋„ˆ(Sequential Container)์˜€๋‹ค๋ฉด

map๊ณผ set์€ ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ(Associative Container)์ด๋‹ค.

์—ฐ๊ด€์ด๋ผ๋Š” ๋ง์€ ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ž๋ฃŒ์™€ key๊ฐ’์ด ์„œ๋กœ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

map์€ pair<key, value>๋ฅผ ์›์†Œ๋กœ ์ €์žฅํ•˜๋Š”๋ฐ, key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

set์€ key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์›์†Œ๋ฅผ ์ •๋ ฌ ์ƒํƒœ๋กœ ์ €์žฅํ•˜์ง€๋งŒ, value๊ฐ€ ๋”ฐ๋กœ ์žˆ์ง€ ์•Š๋‹ค.

์ฆ‰, set์€ key์™€ value๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์›์†Œ๋กœ ์ €์žฅํ•œ๋‹ค.

์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ฐพ๊ณ ์ž ํ•˜๋Š” ์›์†Œ๋ฅผ ๋นจ๋ฆฌ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ์—ฐ์† ์ปจํ…Œ์ด๋„ˆ๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” n * log2(n) ์ด๋‹ค.

 

์—ฐ์† ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š”๋ฐ O(1)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๋ฐ˜๋ฉด

์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š”๋ฐ ๊ธฐ๋ณธ ๋กœ๊ทธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›์†Œ๊ฐ€ ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋” ์จ์„œ,

์ฐพ๋Š”๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

[ map ]

STL map

์ˆซ์ž๊ฐ€ key๊ฐ’์ด๊ณ , ๋ฌธ์ž๊ฐ€ value์ด๋‹ค.

STL map์€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ red-black ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

map์˜ key๋Š” ์œ ์ผ(unique) ํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์ค‘๋ณต๋œ key๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๊ฐ™์€ key๊ฐ’์„ ๊ฐ–๋Š” ์›์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด multimap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

map์€ key๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์ธ value๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

 

 

 

map์˜ ์›์†Œ๋Š” pair<key, value>์ด๋ฏ€๋กœ

ํ•ญ์ƒ pair ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜๋ฉด ๋œ๋‹ค.

์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ๋Š” key๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

map ์›์†Œ ์ถ”๊ฐ€

map์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 5๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1. pair<key, value> ์ž„์‹œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ†ตํ•œ ์›์†Œ ์‚ฝ์ž… ๋ฐฉ๋ฒ•.

2. pair<key, value>๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” make_pair ํ•จ์ˆ˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•.

3. make_pair๋กœ pair<key, value>๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ด๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

4. emplace ๋‚ด๋ถ€์—์„œ pair<key, value>๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•.

5. insert_or_assign์„ ํ†ตํ•œ key๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•.

map์˜ ์›์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ first๋Š” key๊ฐ’, second๋Š” value๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

map ์›์†Œ ์‚ญ์ œ

map์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ erase()๋ฅผ ํ†ตํ•ด ์›์†Œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

key๊ฐ’์„ ํ†ตํ•ด ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

[]์„ ํ†ตํ•œ value ์ฐธ์กฐ

map์€ [] ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด value๊ฐ’์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด์„œ ์—ฐ๊ด€ ๋ฐฐ์—ด์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

๋ฐฐ์—ด๊ณผ ๊ฐ™์ด map์€ key๊ฐ’์„ index๋กœ ์‚ฌ์šฉํ•˜์—ฌ value์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋ฅธ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—ฐ์†๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  map์—์„œ๋Š” ์–ด๋–ค ์ž๋ฃŒํ˜•์ด๋ผ๋„ key๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

 

[ set ]

set

map๊ณผ set์˜ ๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„์€ ํฌ๊ฒŒ ๋‹ค๋ฅธ ๊ฒƒ์ด ์—†๋‹ค.

set์€ key๋ฅผ ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•œ๋‹ค.

key์™€ value๊ฐ€ ๊ฐ™์€ map์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

๋ฉค๋ฒ„ ํ•จ์ˆ˜๋„ map๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

 

set์€ ์›์†Œ๋ฅผ ํ•ญ์ƒ ์ •๋ ฌ ์ƒํƒœ๋กœ ์ €์žฅํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

set<int>๋Š” ๋ชจ๋“  int๋ฅผ less<int>๋กœ ๋น„๊ตํ•˜์—ฌ ์ €์žฅํ•  ๊ฒƒ์ด๋‹ค.