๐ก map์ ์ฃผ์ ์ธํฐํ์ด์ค์ ํน์ง
1. ์ฐ๊ด ์ปจํ ์ด๋ ์ค ์์ฃผ ์ฌ์ฉํ๋ ์ปจํ ์ด๋
2. ์์๋ฅผ key์ value์ ์(pair ๊ฐ์ฒด)์ผ๋ก ์ ์ฅ
3. key๋ ํด๋น ์ปจํ ์ด๋์์ ์ ์ผ (์ฆ, ์ค๋ณต key ํ์ฉ X)
4. ๊ธฐ๋ณธ ์ ๋ ฌ ๋ฐฉ๋ฒ์ less์ด๋ฉฐ, key๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
5. set๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค ๋ฉค๋ฒ ํจ์๋ฅผ ์ ๊ณตํ๋ฉฐ ๊ฑฐ์ ์ ์ฌ
6. [] ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ key ๊ฐ์ ํด๋นํ๋ value์ ์ ๊ทผ -> ์ฝ์ or ์์ ์ด ๊ฐ๋ฅ
7. insert()๋ pair ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ ์ปจํ ์ด๋์ ์ ์ฅ
๐ก ์์ฑ์
1. ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ
// pair๊ฐ์ฒด์ first:key second:value
map<int, int> m;
๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค์ less๋ก ์ค์ ๋์ด ์์ด ์ธ ๋ฒ์งธ์ธ์๋ก ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋ก ๋ฃ์ง ์๋๋ค๋ฉด ์ ๋ ฌ๊ธฐ์ค์ less๋ก ์ค์ ๋ฉ๋๋ค.
<>์์ ์์๋๋ก key์ ์๋ฃํ๊ณผ value์ ์๋ฃํ์ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
2. ์ ๋ ฌ ๊ธฐ์ค ๋ณ๊ฒฝ
๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค less๋ฅผ greater๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์ธ ๋ฒ์งธ ์ธ์๋ก greater<์๋ฃํ>์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์, ์ ๋ ฌ์ key ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ <> ์ฌ์ด์ key์ ์๋ฃํ์ ๋ฃ์ด์ค์ผ ํ๋ค๋ ์ฌ์ค์ ๋๋ค.
// pair๊ฐ์ฒด์ first:key second:value
// key์ ์๋ฃํ์ด intํ์ด๊ธฐ ๋๋ฌธ์, greater<int>
map<int, float, greater<int>> m;
๐ก ์ฝ์
1. insert(pair ๊ฐ์ฒด)
key์ value๋ฅผ pair๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค.
// insert()์ key์ value๋ฅผ pair๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ
// pair ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง
// 1.
m.insert(pair<int, float> (5, 2.1));
// 2.
m.insert(make_pair(5, 2.1));
insert() ๋ฉค๋ฒ ํจ์๋ ์ ์ฅํ ์์์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์์ ์ฝ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ bool๊ฐ์ pair ๊ฐ์ฒด๋ก ๋ฐํํฉ๋๋ค.
map<int, float> m;
pair<map<int, float>::iterator, bool> pr;
pr = m.insert(make_pair(1, 1.1));
// ์ฝ์
์ฑ๊ณต!
if(pr.second){
// pr.first๋ ์ฝ์
ํ ์์น์ ๋ฐ๋ณต์์ด๋ฏ๋ก, ์ด๋ฅผ ํตํด key์ value์ ์ ๊ทผํ ์ ์๋ค.
cout << "key: " << pr.first->first << endl;
cout << "value: " << pr.first->second;
}
else if(!pr.second){
cout << "key๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค" << endl;
}
// ์ด๋ฏธ ์กด์ฌํ๋ key๋ฅผ ์ฝ์
ํ๋ฏ๋ก ์ฝ์
์คํจ
pr = m.insert(make_pair(1, 2.5));
if(pr.second){
// pr.first๋ ์ฝ์
ํ ์์น์ ๋ฐ๋ณต์์ด๋ฏ๋ก, ์ด๋ฅผ ํตํด key์ value์ ์ ๊ทผํ ์ ์๋ค.
cout << "key: " << pr.first->first << endl;
cout << "value: " << pr.first->second;
}
else if(!pr.second){
cout << "key๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค" << endl;
}
[์ถ๋ ฅ ๊ฒฐ๊ณผ]
// pr = m.insert(make_pair(1, 1.1));
key: 1
value: 1.1
// pr = m.insert(make_pair(1, 2.5));
key๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค
2. [] ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ์ฝ์ & ๊ฐฑ์
1) ์ฝ์
[ ]์์ key ๊ฐ์, = ๋ค์ ์ฝ์ ํ๊ณ ์ถ์ value ๊ฐ์ ์ ์ต๋๋ค.
ํ์ฌ ์ปจํ ์ด๋ ์์ ์กด์ฌํ์ง ์๋ key๊ฐ์ด๋ผ๋ฉด ์์(key: 1, value: 1.1)์ ์ฝ์ ํฉ๋๋ค.
map<int, float> m;
// key: 1, value: 1.1 ์ฝ์
m[1] = 1.1;
// key: 2, value: 2.3 ์ฝ์
m[2] = 2.3;
2) ๊ฐฑ์
๋ง์ผ ์ด๋ฏธ ์กด์ฌํ๊ณ ์๋ key ๊ฐ์ด๋ผ๋ฉด, ํด๋น ์์(key: 1, value: 1.1)์ value๋ฅผ 1.5๋ก ๊ฐฑ์ ํฉ๋๋ค.
map<int, float> m;
// key: 1, value: 1.1 ์ฝ์
m[1] = 1.1;
// key: 1์ ํด๋นํ๋ value ๊ฐ ๊ฐฑ์
m[1] = 1.5;
๐ก ์ฐธ์กฐ
1. find(key)
key๊ฐ์ ํด๋นํ๋ ์์์ ์์น๋ฅผ ๋ฐ๋ณต์(iterator)๋ก ๋ฐํํฉ๋๋ค.
๋ง์ผ ์ฐพ๊ณ ์ ํ๋ key ๊ฐ์ด ์๋ค๋ฉด end()๋ฅผ ๋ฐํํ๊ณ , ์ฐพ๊ณ ์ ํ๋ key๊ฐ์ ๋ฐ๊ฒฌํ๋ค๋ฉด ํด๋น ์์น๋ฅผ ๋ฐ๋ณต์๋ก ๋ฐํํฉ๋๋ค.
map<int, float> m;
map<int, float>::iterator iter; // ๋ฐ๋ณต์
m[1] = 1.1; // key: 1, value: 1.1 ์ฝ์
// ์ฐพ๊ณ ์ถ์ key ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ
iter = m.find(1);
// ์ํ๋ key ๊ฐ์ ์ฐพ์ผ๋ฉด ํด๋น ์์น๋ฅผ ๋ฐ๋ณต์๋ก ๋ฐํ
if(iter != m.end()){
cout << "์ฐพ๊ธฐ ์ฑ๊ณต" << endl;
}
// ์ํ๋ key ๊ฐ์ด ์๋ค๋ฉด end()์์น ๋ฐํ
else{
cout << "์ฐพ๊ธฐ ์คํจ" << endl;
}
2. count(key)
๋งค๊ฐ ๋ณ์๋ก value์ ๊ฐฏ์๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ key ๊ฐ์ ์ ๋ฌํฉ๋๋ค.
key๊ฐ์ ์๋ value์ ๊ฐฏ์๋ฅผ ๋ฐํํฉ๋๋ค.
ํ์ง๋ง map์ ์ค๋ณต key๊ฐ ํ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์, ๊ฒฐ๋ก ์ ์ผ๋ก๋ 0 ํน์ 1์ ๋ฐํํฉ๋๋ค.
map<int, float> m;
m[1] = 1.1; // key: 1, value: 1.1 ์ฝ์
m[2] = 2.3; // key: 2, value: 2.3 ์ฝ์
// key 1์ value๊ฐ 1๊ฐ ์์ผ๋ฏ๋ก 1 ๋ฐํ
int n1 = m.count(1);
// key 3์ด ์กด์ฌํ์ง ์์ผ๋ฏ๋ก 0 ๋ฐํ
int n2 = m.count(3);
3. empty()
ํด๋น ์ปจํ ์ด๋๊ฐ ๋น์๋์ง(์์(key, value)๊ฐ ์๋์ง)์ ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
map<int, float> m;
m[1] = 1.1; // key: 1, value: 1.1 ์ฝ์
m[2] = 2.3; // key: 2, value: 2.3 ์ฝ์
cout << m.empty(); // false
4. size()
ํด๋น ์ปจํ ์ด๋์ ์์๊ฐ ๋ค์ด์๋ ๊ฐฏ์๋ฅผ ๋ฐํํฉ๋๋ค.
map<int, float> m;
m[1] = 1.1; // key: 1, value: 1.1 ์ฝ์
m[2] = 2.3; // key: 2, value: 2.3 ์ฝ์
cout << m.size(); // return 2
๐ก ์ ๊ฑฐ
1. erase(key)
์ง์ฐ๊ณ ์ ํ๋ key๊ฐ์ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํ๋ฉด, key ๊ฐ์ด ๋งค๊ฐ๋ณ์์ธ ์์๋ฅผ ์ฐพ์์ ์ญ์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
map<int, float> m;
m[1] = 1.1; // key: 1, value: 1.1 ์ฝ์
m[2] = 2.3; // key: 2, value: 2.3 ์ฝ์
// key๊ฐ์ผ๋ก 1์ ๊ฐ์ง๊ณ ์๋ ์์ ์ญ์ ํ, ์ฑ๊ณต ์ฌ๋ถ ๋ฐํ
bool isDeleted = m.erase(1);
cout << isDeleted; // ์ฑ๊ณต
2. clear()
ํด๋น map ์ปจํ ์ด๋์ ์๋ ๋ชจ๋ ์์๋ฅผ ์ญ์ ํฉ๋๋ค.
map<int, float> m;
m[1] = 1.1; // key: 1, value: 1.1 ์ฝ์
m[2] = 2.3; // key: 2, value: 2.3 ์ฝ์
m.clear(); // map ์ปจํ
์ด๋์ ์๋ ๋ชจ๋ ์์ ์ญ์
cout << m.size(); // 0
๐ก map ์ปจํ ์ด๋ ์ฃผ์ ํน์ง ์ ๋ฆฌ
1. ๋ํ์ ์ธ ์ฐ๊ด ์ปจํ ์ด๋์ด์ ๋ ธ๋ ๊ธฐ๋ฐ ์ปจํ ์ด๋
2. ํน์ ์ ๋ ฌ ๊ธฐ์ค(default: less)์ผ๋ก key๊ฐ ์๋์ผ๋ก ์ ๋ ฌ
3. key์ value๊ฐ ์ง์ ์ง์ด ์์๋ฅผ ์ด๋ฃน๋๋ค.
4. [] ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์์ ์ถ๊ฐ, ์์ ์ด ๊ฐ๋ฅ
5. ์ปจํ ์ด๋์ ์, ๋ค ์ฐธ์กฐ, ์ธ๋ฑ์ค ์ฐธ์กฐ๊ฐ ๋ถ๊ฐ๋ฅ
6. ํต์ฌ -> ๋น ๋ฅธ ์์ ์ฐพ๊ธฐ
๊ท ํ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ด์ฉํ ๋ก๊ทธ ์๊ฐ ๊ฒ์ ๋ณต์ก๋ ๋ณด์ฅ
์ฐธ๊ณ ์ฑ : ๋๋ฅผ ์๊ทนํ๋ C++ STL