C ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋๋ผ๋๊ฒ ํ๋ ์๋ค
์ ๋ง,, ์๋ฃ๊ตฌ์กฐ ๊ด๋ฆฌํ๊ธฐ ํ๋ค๋ค๋ผ๋๊ฑฐ๋ค (๋๋ง ๊ทธ๋ด์ง๋ ๋ชจ๋ฅธ๋ค)
๊ทธ๋์ C++์์ STL์ด ์ ๊ณตํ๋ ์ฌ๋ฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋๋ฌด ํธ๋ฆฌํ๋ค
cf) STL (Standard Template Library)
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, std:: namespace๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ฉด ๋๋ค
ํ์ง๋ง ํ ๋๊ฐ ์ฌ์ฉํ ์๋ก, ์์๊ฑฐ ํ๋๋ ํท๊ฐ๋ ค์ ์ ๋ฆฌํ๊ธฐ๋ก ํ๋ค
- map ์ ์ ๋ฐฉ๋ฒ
- map ์์ ์ฝ์
- map ์์ ๊ฒ์
- map ์์ ์ญ์
- map ์ํ
- map ํฌ๊ธฐ ๊ตฌํ๊ธฐ
0. map์ด ๋ญ๊ฐ์?
์ํค๋ฐฑ๊ณผ: ๋ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์, map์ ๊ณ ์ฐจ ํจ์๋ก์ ์ ํด์ง ํจ์๋ฅผ ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ ์ฉ(apply)ํ์ฌ ๊ทธ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ ๋ฌํ๋ค.
KEY์ VALUE ํํ๋ก ๋์ด์๋ ์๋ฃ๊ตฌ์กฐ ์ ๋๋ค
์ฝ์ ํ ๋๋ KEY์ VALUE๋ฅผ ๊ฐ์ด ๋ฃ์ด์ฃผ๊ณ
๊ฒ์์ด๋ ์ํ์ ๊ฒฝ์ฐ์๋ KEY๋ฅผ ์ด์ฉํด์ ๊ฐ์ ์ป์ด์ ์ฌ์ฉํ๊ณค ํฉ๋๋ค
1. map ์ ์ ๋ฐฉ๋ฒ
๋๋ ์ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ํญ์ ๊ณ ๋ฏผ๋๋๊ฒ ์๋ค
๊ทธ๋์ ์ด๋ป๊ฒ ์ฒ์์ ์จ์ผํ๋๊ฑฐ์ง? ์ด ๊ณ ๋ฏผ์ ํญ์ ํ๋ค,,
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
map<int, string> testMap;
return 0;
}
์ด๋ ๊ฒ๋ง ํด์ฃผ๋ฉด ์ด๋ฏธ ๋ค ํ๋ค๊ณ ๋ณผ ์ ์๋ค
์์์ด ๋ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค
ํค๋๋ #include <map>์ ํฌํจํด์ฃผ๋ฉด ๋๋ค
map์ KEY์ VALUE๋ก ์ด๋ค์ง๋ค๋ ๊ฒ์ ์๊ณ ๋ณด๋ฉด ๋ชจ์์ ์๊ธฐ ์ฝ๋ค
map<KEY, VALUE>
๋ฌผ๊ตฌ๋๋ฌดํ๊ณ ๋ด๋ ์ด ๋ชจ์์ผํ ๋๊น ๋ง์ด๋ค
์์ KEY, VALUE ์๋ฆฌ์ key๋ก ์ธ ์๋ฃํ๊ณผ value๋ก ์ธ ์๋ฃํ๋ง ๋ฃ์ด์ฃผ๋ฉด ๋์ด๋ค
2. map ์์ ์ฝ์
๋ง๋ map์ ๊ฐ์ ๋ฃ์ด๋ณด์
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
map<int, string> testMap;
/* 1. insert() */
testMap.insert(pair<int, string>(1, "map1"));
/* 2. operator[] */
testMap[2] = "map2";
return 0;
}
map์ ๊ฐ์ ๋ฃ๋ ๋ฐฉ์์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค
- insert() ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฃ๊ธฐ
- operator[] ๋ฐฉ์์ผ๋ก ๋ฃ๊ธฐ
๊ฐ๋จํ๊ฒ๋ง ์ฐจ์ด๋ฅผ ๋ค์๋ฉด,
insert()๋ map์ ์์ ์ถ๊ฐ๋ง ๊ฐ๋ฅํ๊ณ
operator[] ๋ฐฉ์์ ์ถ๊ฐ ๋ฐ ์์ ์ด ๋๋ค ๊ฐ๋ฅํ๋ค
(return ๊ฐ์ ๋ค๋ฃจ์ง ์๊ฒ ๋ค)
๋๋ operator[] ๋ฐฉ์์ ๋ง์ด ์ด๋ค.
์๋๋ฉด ์ด๋ฏธ key์ ํด๋นํ๋ ๊ฐ์ด ์์ ๋, ์ต์ ์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ํด์ฃผ๊ณ ์ถ์๋ฐ
inser()๋ key ๊ฐ์ด ์ค๋ณต๋๋ฉด ์๋ฌ๋ฅผ ๋ฑ๋๋ค;; ์ ๋ฃ์ด์ง!
๋ฌผ๋ก , ์ํฉ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ ๋๋๊ฑฐ๊ฐ ์ ์ข์ ๊ฒฝ์ฐ๋ ์์ผ๋๊น ์ ํํด์ ์ฐ๋ฉด ๋๋ค
3. map ์์ ๊ฒ์
๊ทธ๋ฌ๋ฉด ๋ฃ์ ๊ฐ์ ๋์ผ๋ก ํ์ธํด๋ณด๊ณ ์ถ์ด์ง๋ค
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
map<int, string> testMap;
testMap.insert(pair<int, string>(1, "map1"));
testMap[2] = "map2";
map<int, string>::iterator iter;
iter = testMap.find(1);
if( iter != testMap.end() )
{
cout << iter->first << "\n";
cout << iter->second << "\n";
}
return 0;
}
๋ญ๊ฐ ๋ณต์กํด๋ณด์ด์ง๋ง ๊ทธ๋ ์ง ์๋ค
map<int, string>::iterator iter;
์ฌ๊ธฐ๊ฐ ์กฐ๊ธ ์ญ ํ ์ ์๋๋ฐ, iterator๋ ๋ค์์ ์์ธํ ๋ณด๋ ค๊ณ ํ๋ค
map์ ์ฒ์๋ถํฐ ๋๊น์ง์ ์์์ ์ ๊ทผํ๊ณ ์ถ์ด์ ์ฌ์ฉํ๋ iterator(๋ฐ๋ณต์) ๋ผ๊ณ ๋ง ์์๋์
์ด ๋ฐ๋ณต์๊ฐ ์๋นํ ์ฌ๋ฐ๋ ์น๊ตฌ์ธ๋ฐ, ๋๊ฒ ๊ฐ์์ ์ธ? ํจ์๋ค์ ์ฌ์ฉํ ์ ์๋ค
์์ ์์์์ ์ฐ๊ณ ์๋ find()์ end() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด
C์์ ์ฌ์ฉํ๋ for๋ฌธ์ด๋ while๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์์์ ๋ฐ๋ณตํด์ ์ ๊ทผํ ์ ์๋ค
์๋ 3๊ฐ์ง๋ง ๊ธฐ์ตํด๋๋ฉด iterator๋ฅผ ๋ชฐ๋ผ๋ ์ฌ์ฉํ ์ ์๋ค
- find() ํ๋ผ๋ฏธํฐ์๋ ์ฐพ๊ณ ์ ํ๋ KEY์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค
- iterator->first๋ map์ KEY ๊ฐ
- iterator->second๋ map์ VALUE ๊ฐ
//map<int, string>::iterator iter;
auto iter = testMap.find(1);
if( iter != testMap.end() )
{
cout << iter->first << "\n";
cout << iter->second << "\n";
}
๋๋ ๋ณดํต auto ์๋ฃํ์ ์จ์ ์ฌ์ฉํ๋ค
auto๋ ์ง์ง ๋๋ฌด ์ข๋ค
4. map ์์ ์ญ์
์ญ์ ๋ฐฉ๋ฒ์ insert()๋ฅผ ์์๋ค๋ฉด, ์์ํ๊ธฐ ์ฝ๋ค
์์๋ฅผ erase ํด์ฃผ๋ฉด ๋๋๊ฑฐ๋๊น, erase()๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค
testMap.erase(1);
์ด๋ ๊ฒ ๋ง์ด๋ค. ํ๋ผ๋ฏธํฐ์๋ KEY ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค
๊ทธ๋ฌ๋ฉด map์ ์๋ ์์๋ค ์ค, KEY์ ํด๋นํ๋ ์์๊ฐ ์ญ์ ๊ฐ ๋๋ค. KEY๋ ๊ฐ์ด ์ญ์ ๋๋ค
๋ชจ๋ ๊ฑธ ๋ค ์ง์ฐ๊ณ ์ถ์ผ๋ฉด
testMap.clear();
clear() ํจ์๋ฅผ ์ฐ๋ฉด ๋๋ค
5. map ์ํ
์ํ๋ ์ญ์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ฐ๋ณต์๋ฅผ ํตํด ๋ด์ผํ ๊ฒ ๊ฐ์ ๊ธฐ๋ถ์ด ๋ ๋ค
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
map<int, string> testMap;
testMap.insert(pair<int, string>(1, "map1"));
testMap[2] = "map2";
auto iter = testMap.find(1);
if( iter != testMap.end() )
{
cout << iter->first << "\n";
cout << iter->second << "\n";
}
for( iter = testMap.begin(); iter != testMap.end(); iter++ )
{
cout << iter->first << "\n";
cout << iter->second << "\n";
}
return 0;
}
์ํ๋ for๋ฌธ๊ณผ ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํด์ ํ ์ ์๋ค
for( iter = testMap.begin(); iter != testMap.end(); iter++)
begin() ๋ถํฐ ~~ end() ๊น์ง ์์ ์ ๊ทผ์ ํ๊ฒ ๋ค๋๊ฑฐ๋ค
6. map ํฌ๊ธฐ ๊ตฌํ๊ธฐ
map์ ํฌ๊ธฐ๋ฅผ ์๊ณ ์ถ๋ค๋ฉด? size๋ฅผ ์๊ณ ์ถ๋ค๋ฉด?
์ฌ์ฌ ์ด์ ๋๋์ด ์จ๋ค
testMap.size();
๊ทธ๋ ๋ค.. size() ํจ์๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค
๋ณ๊ฑธ ๋ค ๋ง๋ค์ด ๋์ ๊ฒ ๊ฐ๋ค
์ฌ์ฉ๋ฐฉ๋ฒ๋ง ์ฐ์ ์ ๋ฆฌํ๊ณ ์ถ์๋๋ฐ,
์ฌ์ค map์ด๋,, set์ด๋,, ๋ฆฌ์คํธ๋,, ์์์ผํ ๊ฑฐ๊ฐ ๋๋ฌด ๋ง๋ค
๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ํ๋ฒ์ ์ ๋ฆฌํ๋๊ฒ ์ข์ ๋ฏ ํ๋ค
๊ท์ฐฎ์์ ๊ทธ๋ฐ๊ฑฐ ์๋
์ํค๋ฐฑ๊ณผ
ko.wikipedia.org/wiki/Map_(%EA%B3%A0%EC%B0%A8_%ED%95%A8%EC%88%98)
'๐ C๋ C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Boost Asio์ ๋ํด์ ์์๋ณด์ (4) | 2021.05.20 |
---|---|
C++ ํด๋์ค ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ๋ฅผ ์์๋ณด์ (4) | 2021.03.25 |
C++ ๋๋ฌธ์/์๋ฌธ์ ๋ณํ (4) | 2021.02.26 |
C++ Function Object (ํจ์ ๊ฐ์ฒด)๋ฅผ ์์๋ณด์ (4) | 2021.01.22 |
C++ ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๋ฅผ ์์๋ณด์ (0) | 2021.01.04 |