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 ]
์ซ์๊ฐ key๊ฐ์ด๊ณ , ๋ฌธ์๊ฐ value์ด๋ค.
STL map์ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ผ์ข ์ธ red-black ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
map์ key๋ ์ ์ผ(unique) ํด์ผ ํ๋ค. ์ฆ, ์ค๋ณต๋ key๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ key๊ฐ์ ๊ฐ๋ ์์๋ฅผ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด multimap์ ์ฌ์ฉํ๋ฉด ๋๋ค.
map์ key๋ฅผ ์ด์ฉํด ๋ค๋ฅธ ์๋ฃํ์ธ value๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๋ ์ฐ๊ด ์ปจํ ์ด๋์ด๋ค.
map์ ์์๋ pair<key, value>์ด๋ฏ๋ก
ํญ์ pair ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์์๋ฅผ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ์ฃผ์ํ๋ฉด ๋๋ค.
์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋๋ key๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ๋ค.
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์ ๋ฉค๋ฒ ํจ์ erase()๋ฅผ ํตํด ์์๋ฅผ ์ญ์ ํ ์ ์๋ค.
key๊ฐ์ ํตํด ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค.
map์ [] ์ฐ์ฐ์๋ฅผ ํตํด value๊ฐ์ ์ฐธ์กฐํ ์ ์์ด์ ์ฐ๊ด ๋ฐฐ์ด์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๋ฐฐ์ด๊ณผ ๊ฐ์ด map์ key๊ฐ์ index๋ก ์ฌ์ฉํ์ฌ value์ ์ก์ธ์ค ํ ์ ์๋ค.
๋ค๋ฅธ ์ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐ์๋์ด ์์ง ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ map์์๋ ์ด๋ค ์๋ฃํ์ด๋ผ๋ key๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด๋ค.
[ set ]
map๊ณผ set์ ๊ธฐ๋ฅ์ ์ธ ๋ถ๋ถ์ ํฌ๊ฒ ๋ค๋ฅธ ๊ฒ์ด ์๋ค.
set์ key๋ฅผ ์ ๋ ฌ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๋ฉฐ ์ด๊ฒ์ ๊ทธ๋๋ก ์ ์ฅํ๋ค.
key์ value๊ฐ ๊ฐ์ map์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค.
๋ฉค๋ฒ ํจ์๋ map๊ณผ ๊ฑฐ์ ๋์ผํ๋ค.
set์ ์์๋ฅผ ํญ์ ์ ๋ ฌ ์ํ๋ก ์ ์ฅํ๋ ์ปจํ ์ด๋๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
set<int>๋ ๋ชจ๋ int๋ฅผ less<int>๋ก ๋น๊ตํ์ฌ ์ ์ฅํ ๊ฒ์ด๋ค.
'PROGRAMMING > C++ STL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ unordered_map/set (0) | 2020.08.11 |
---|---|
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ list (0) | 2020.08.09 |
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ vector (0) | 2020.08.07 |
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ array (0) | 2020.08.06 |
๋ค์ ์ ๋ฆฌํ๋ C++ STL [ ๊ฐ์ ] (0) | 2020.08.05 |