[GP] C++์์ Map์ ๋ํด ์์๋ณด์
์ด ๊ธ์ N.K Dev Lab์์ ์์ฑ๋ ๊ธ์
๋๋ค.
์๋ ํ์ธ์. ์ค๋์ C++ STL์ ๋ํ ๊ธ์ ์จ๋ณด๋ ค ํฉ๋๋ค. ๋ณธ๋ ์ ๋ STL๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ธ์ ์ ์ฐ์ง ์์ผ๋ ค ํ์ต๋๋ค. ์๋ Documentation๋ ์ ๋์ด ์๋ ํธ์ด๊ณ , ๋ธ๋ก๊ทธ์ ๊ธ ์ฃผ์ ๋ก ์ฐ๊ธฐ์๋ ์ ํฉํ์ง ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง ์ค๋ ์ด ๊ธ์ ์ฐ๊ฒ ๋ ๊ณ๊ธฐ๋ ์ ๊ฐ ์๊ณ ๋ฆฌ์ฆ ํ์ด๋ฅผ ๋ช ๋ฒ ์งํํ๋ฉด์ ์ ๊ฐ ์ฃผ๋ก ์ฐ๊ณ ์๋ Java ์ธ์ด์ ๋ค์ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ผ๋ก ํ์ธ์ด ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ช ์์์ต๋๋ค. ๊ทธ๋์ ๊ฐ ์ธ์ด์์ ๋น์ทํ ์๋ฃ๊ตฌ์กฐ์ ํํ๊ฐ STL์ด๋ API๋ก ์ง์๋๋คํ๋๋ผ๋ ์ธ์ด์ ๋ฐ๋ผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ ๊ฐ ํจ์๋ค์ ๋ํ ๊ธฐ๋ฅ์ ๋ํด์๋ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ํ์๊ฐ ์๋ค๊ณ ๋๊ผ์ต๋๋ค.
What is STL ?
STL์ C++์์ ์ ๊ณตํ๋ Standard Template Library์ ๋๋ค. C++ ์ธ์ด๋ ๊ธฐ์กด์ C์ธ์ด์์ ํด๋์ค๋ ์์, ์ ๊ทผ ์ง์ ์ ๋ฑ์ด ์ถ๊ฐ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๊ณ ์๊ณ ๊ณ์ญ๋๋ค. ๋ง์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ๋ฐ ์ข์ ๊ธฐ๋ฅ + ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์ค์ ๋ก ์ ๋ C++ ํ๋ก๊ทธ๋๋ฐ ํ์ ๋ STL๋ณด๋ค๋ Boost ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ์ต๋๋ค. Boost ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ C++ ์ธ์ด๋ก ์ ๊ณต๋๋ ๋ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ก ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฉํ Asio ๋ฑ์ ์ ๊ณตํ์ฌ C++๋ฅผ ์ฝ๊ณ ๋ ๊ฐ๋ ฅํ๊ฒ ํํํด์ฃผ๋ ์์ฃผ ์ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
๋์ฑ ์ข์ ๊ฒ์ Boost์์ ์ ๊ณตํ๋ ์์คํ ์์ (Thread, Semapore ๋ฑ)์ System Call ํํ๊ฐ ์๋ Library Call ํํ๋ก ์ ๊ณตํ์ฌ Linux, Windows ๋ฑ์ OS์ ์ ์ฝ์์ด ํฌ๋ก์ค ํ๋ซํผ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ๋ ํ๋ชซํ๊ณ ์์ฃ .
ํ์ง๋ง ์ด๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ชจ๋ 3rd party ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ํด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ๋ฐ์ฌ์์ ๊ณต์์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด ์๋ ์ 3์๊ฐ ๊ฐ๋ฐํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ๊ธฐ๋ฅ์ด ์จ์ ํ๊ฑฐ๋ ์ธ์ฆ๋ฐ์ ์ฝ๋๋ผ๊ณ ํ๊ธฐ์ ์กฐ๊ธ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ์ ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ค์ผ๋ก ์ธ์ฆ๋ฐ์ ๋ชจ์์ง์ STL์ด๋ผ๊ณ ํฉ๋๋ค.
Container
์ปจํ ์ด๋๋ STL์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด (์๋ฃ๊ตฌ์กฐ) ๋ค์ ๋๋ค. ๋ณดํต ์ ๋ vector, pair, list, map, stack, queue๋ฅผ ์ฃผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ํธ์ ๋๋ค. ์ด ๊ธ์์๋ map์ ๋ํด์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Map
์๋ฃ๊ตฌ์กฐ ๋งต(Map)์ <Key, Value> ํํ๋ก ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ฃผ๋ก ๋งคํํ๋ ์ฉ๋๋ก ๋ง์ด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ ์ ๋ ฌ๋ ํํ๋ก ์ ๊ณตํ๋ค๋ ๊ฒ์ด ํน์ง์ ๋๋ค. Key ๊ฐ์ ์ฐพ์ ๋ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ ์๋ํ ์ ๋๋ก ๋งค์ฐ ์ฑ๋ฅ์ด ์ข์ต๋๋ค.
1 |
|
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์ ๊ฐ์ต๋๋ค. ๋จผ์ map ์ฝ๋๋ฅผ includeํ๊ณ , ๋ค์์คํ์ด์ค๋ฃฐ ์ถ๊ฐํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ด ์ํ๋ <Key, Value> ํํ์ ๋ฐ์ดํฐ ํ์ ์ ์ ์ธํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ ์ธํ๋ฉด ์ฒซ ๋ฒ์งธ Map ์์ฑ์ด ์๋ฃ๋ฉ๋๋ค.
Key Point
Map์ ์ฌ์ฉํ๋ ํฌ์ธํธ๋ ๋ฐ๋ก ์ขํ ์ง์ ์ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ Pair๋ Point์ ์๋ฃ๋ฅผ ๋ณด๊ดํ ๋ ๋งค์ฐ ์ ๋ฆฌํฉ๋๋ค. Map ์ญ์ 2์ฐจ์ ๋ฐฐ์ด์ฒ๋ผ 2์ฐจ์ Map์ผ๋ก๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์๋ฃ๋ค์ ๋ณด๊ดํ๊ณ ์ฝ๊ฒ ๊บผ๋ด์ค๋ ๋ฐ ์์ด ํ๋ฐฉ๋ฏธ์ธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ฒ์ Map ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ธํ๋ฉด ์๋ฌด๊ฒ๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ๋ฃ์ด์ค์ผ ํ๋๋ฐ, ๊ฐ์ ๋ฃ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
How to insert value
๋จผ์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ insert ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
1 |
|
insert ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋ ๊ฐ์ ์ธ์๊ฐ ์๋ 1๊ฐ์ ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ์์ ๋ฃ์ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก๋ Pair ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ๋ฃ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ํน์ C++์์ ์ ๊ณตํ๋ make_pair ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ํ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ C++ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ operator๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
1 |
|
operator๋ ํจ์ ์์ด ์์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์คํ๋ ค ๋ ๊น๋ํ๊ณ pair๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ฃ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ๋ฒ์ด ๋ ๊ฐ๋ ์ฑ์ด ์ข๋ค๊ณ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ํจ์ ์ด ์จ๊ฒจ์ ธ ์์ต๋๋ค.
Insert method vs Operator
operator๊ฐ ์กด์ฌํ๋ค๋ฉด Insert ๋ฉ์๋๋ deprecated ํด๋ ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ชจ๋ ์กด์ฌํ๋ ๊ฑธ๊น์? ๊ฑฐ๊ธฐ์๋ ์์ฃผ ๋ฏธ์ธํ ์ฐจ์ด๊ฐ ์จ๊ฒจ์ ธ ์์ต๋๋ค.
- Insert Method
- Map์์ Key์ Value๋ฅผ ๋ฃ๋ ๋ฉ์๋.
- ๊ธฐ์กด์ ํค๊ฐ์ด ์ค๋ณต๋ ๊ฒฝ์ฐ, ์ด ๋ฉ์๋๋ ๋ฌด์ํจ
- Operator
- ๊ธฐ์กด์ ํค๊ฐ์ด ์ค๋ณต๋ ๊ฒฝ์ฐ, ์๋ก์ด ๊ฐ์ผ๋ก ๋์ฒด
Insert Method๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ๊ธฐ์กด์ ํค๊ฐ์ด ์ค๋ณต๋์์ ๋, ์ด ๋ฉ์๋๋ ๊ทธ์ ๋ฌด์๋ฉ๋๋ค. ๋ง๊ทธ๋๋ก ๊ธฐ์กด์ ํค๊ฐ์ ๊ฐ์ง๊ณ ์๋ value๋ฅผ ์งํจ๋ค๋ ๊ฒ์ด์ฃ . ์ฆ ํค๊ฐ์ด ์ค๋ณต๋ ๊ฒฝ์ฐ, ๊ธฐ์กด์ ๊ฐ์ ์ฐ์ ํ๋ค๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง operator๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๊ธฐ์กด์ ํค ๊ฐ์ด ์กด์ฌํ๋คํ๋๋ผ๋ ํ์ฌ์ ์ฝ๋๋ฅผ ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด์ ํค์ ์กด์ฌํ๋ ๊ฐ์ ์ ๊ฑฐ๋๊ณ , ์๋ก์ด ๊ฐ์ผ๋ก ๋์ฒด๋๋
์ด์ด์ ์ฝ์ผ์๋ ค๋ฉด ์๋์ ๋ฒํผ์ ํด๋ฆญํด์ฃผ์ธ์.
'Programming > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GP] C++ ์ธ์ด์์ MQTT ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2017.10.29 |
---|---|
[GP] Unix Thread์ ๊ธฐ๋ณธ์ ๋ค์ ธ๋ณด์ (0) | 2017.06.26 |
[GP] Boost Library ์ค์น์ ์ฌ์ฉ (0) | 2017.03.05 |
CMake๋ฅผ ์ด์ฉํ C/C++ ํ๋ก์ ํธ ๋น๋ (0) | 2017.03.04 |
chkmd5 (ํ์ผ MD5 ํด์๊ฐ ๊ฐ์ ธ์ค๋ ํ๋ก๊ทธ๋จ, only Windows OS) (0) | 2017.01.26 |