2020. 8. 11. 00:10ใPROGRAMMING/C++ STL
[ STL ์๋ฃ๊ตฌ์กฐ unordered_map/set ]
unordered_map๊ณผ unordered_set์ ์ด๋ฆ ๊ทธ๋๋ก ์์๊ฐ ์๋ค.
key๊ฐ๊ณผ value๊ฐ์ด ์ฐ๊ด์ ์์ง๋ง, ์์๊ฐ ์๋ค?
์ด ๋ง์ ๊ฐ key ๊ฐ๋ง๋ค ํด์ ๋ฒํธํ๊ฐ ์์ด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ ์ฐพ์ ์ ์๋ค๋ ๋ง์ด๋ค.
์ฆ, STL unordered ์ปจํ ์ด๋๋ ํด์(hash) ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ์ ๋ฐ๋น๋ก ํ๋ค.
STL unordered ์ปจํ ์ด๋๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ํด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋กํ๋ ๋จ์ ์ด ์๋ค.
(๋ด๋ถ์ ์ผ๋ก vector์ list๋ฅผ ๊ฐ์ด ์ฐ๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์)
๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ hashํจ์๋ฅผ ๊ฑฐ์ณ์ ๋ฒํธํ๋ฅผ ๋ฐ๋๋ค.
ํด์๊ฐ์ ๋ฏธ๋ฆฌ ๋ด๋ถ์ vector๋ก ๋ง๋ค์ด ๋๋๋ค. (๋ฒํท์ ๋ง๋ค์ด ๋๋๋ค.)
๋ฒํท ๋ฒํธ์ ํด์ ๊ฐ์ ๋งค์นญ ์์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ ์๊ฐ์์ ์ด๋์ ์ป๊ธฐ์ํด ์ฌ์ฉํ๋ค. ๋ด๊ฐ ์ฐพ๋ ์์๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด์์ด๋ค.
ํด์ ๋ฒํธํ๋ฅผ ํตํด ๋ฐ๋ก๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
์ด ๊ตฌ์กฐ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ๊ตฌ์กฐ๋ ์กด์ฌํ์ง ์๋๋ค.
STL unordered ์ปจํ ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(1)์ด๋ค.
[ unordered_set์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ์ ]
๋ฐ์ดํฐ ๊ฐ๊ณผ ๋งค์นญ ๋๋ ํด์ ํ ์ด๋ธ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์๋ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค.
[ unordered_multiset์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ์ ]
STL unordered_multimap/set์ ์ค๋ณต ๊ฐ์ ๋ด์ ์ ์์ด์ ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ์์ด ๋์จ๋ค.
[ ์ฌ์ฉ์ ์ ์ ์๋ฃํ์ unordered ์ปจํ ์ด๋์ ๋ฃ๊ธฐ ]
์ฐ๋ฆฌ๊ฐ ์ง์ ์ ์ํ ์๋ฃํ(struct, class)์ unordered ์ปจํ ์ด๋์ ๋ด๊ธฐ ์ํด์๋?
ํด์ ๋ฒํธํ๋ฅผ ๋ง๋ค ์ ์์ด์ผ ํ๋ค.
์ฆ, hash <> ํจ์๋ฅผ ๊ฑฐ์น ์ ์์ด์ผ ํ๋ค.
์ฌ์ฉ์ ์ ์ ์๋ฃํ์ unordered ์ปจํ ์ด๋์ ๋ฃ๊ธฐ ์ํด ์์๋ก ๋ง๋ ํด๋์ค์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ ์๋ฃํ์ด hash<> ํจ์๋ฅผ ๊ฑฐ์น๊ธฐ ์ํด์๋
==์ () ์ฐ์ฐ์๊ฐ const๋ก ์ค๋ฒ ๋ก๋ฉ๋ผ์์ด์ผ ํ๋ค.
๊ทธ๋ฐ ๋ค์ hash <> ํ ํ๋ฆฟ์ ๋ํด์ ํน์ํํด์ฃผ๋ฉด ๋๋ค.
๋ง์ง๋ง์ผ๋ก unordered_set์ ํด๋์ค ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด๊ฐ๋์ง ํ์ธํด์ฃผ๋ฉด ๋๋ค.
'PROGRAMMING > C++ STL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ map/set (2) | 2020.08.10 |
---|---|
๋ค์ ์ ๋ฆฌํ๋ 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 |