SW์ค์ฌ๋ํ ์ฌ์ ๋จ์์ CodeTree์ ํจ๊ป ์ค์ํ ์ฝ๋ฉํ ์คํธ ๋๋น ์บ ํ์ ์ฐธ์ฌํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค.
* ์ฐธ๊ณ : python๊ณผ c++, java ๋ฑ ์ธ์ด๋ณ๋ก ์ค๋ช ์ด ๋ค๋ฅธ ๋ถ๋ถ ์กด์ฌ! ํ์๋ c++ ์ฌ์ฉ.
map STL
C++์์๋ map์ด๋ผ๋ STL์ ์ด์ฉํ ์ ์์ต๋๋ค.
map์ TreeMap ์๋ฃ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ, TreeMap์ ๊ฒฝ์ฐ ๊ท ํ ์กํ ์ด์งํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ค์ ๊ด๋ฆฌํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ ์ ๋๋ค.
TreeMap์ ๊ฐ ๋ ธ๋์ (key, value) ์ ํํ๋ก ๋ค์ด๊ฐ ์์ด, key๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ธ๋์ ์์น๊ฐ ๊ฒฐ์ ๋๊ณ ๊ฐ key์ ๋ํ value๊ฐ์ ์ ์ฅํ๋ ํํ์ ๋๋ค. ๋ฐ๋ผ์ TreeMap์์ ๋ชจ๋ ํจ์์ ์๊ฐ๋ณต์ก๋๊ฐ ์ ๋ถ ์ ๋๋ค.
#include <map> ํค๋์, map<K, V> name; ํํ์ ์ ์ธ์ด ํ์ํฉ๋๋ค.
๋, map์ ์๋ std::map์ผ๋ก ์ฐ์ฌ์ผ ํ๋ฏ๋ก using name space std;๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํฉ๋๋ค.
์ ์๋ฅผ ๊ด๋ฆฌํ map์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํด ๋ณผ ์ ์์ต๋๋ค.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
return 0;
}
map<int, int> m;๋ก ์ ์ธ๋์ด ์ฌ์ฉ๋ ๋๋ฅผ ์๋ก ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
- m.insert({K, V}) ํน์ m[K] = V
treemap์ ์(K, V)๋ฅผ ์ถ๊ฐํฉ๋๋ค.
{K, V}๋ ์ค์ std::pair๋ผ๋ c++์์ ์ ๊ณตํ๋ ์์ ํ์ ์ ๋๋ค. pair๋ ๋ค์๊ณผ ๊ฐ์ด ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
pair<int, int> p; // pairํ ๋ณ์ ์ ์ธ
p = make_pair(1, 5); // (1, 5)์ ์ ์ธ. p = {1, 5}๋ ๊ฐ๋ฅ
cout << p.first << endl; // ์ฒซ ๋ฒ์งธ ๊ฐ(key) access
cout << p.second << endl; // ๋ ๋ฒ์งธ ๊ฐ(value) access
p.first = 10; // ์ฒซ ๋ฒ์งธ ๊ฐ ๋ณ๊ฒฝ
p.second = 15; // ๋ ๋ฒ์งธ ๊ฐ ๋ณ๊ฒฝ
- m.erase(K)
ํ์ฌ treemap์ ๋ค์ด์๋ ๋ฐ์ดํฐ ์ค key๊ฐ K์ธ ์์ ์ ๊ฑฐํฉ๋๋ค.
- m.find(K) ํน์ m[K]
ํ์ฌ treemap์ key๊ฐ K์ธ ์์ด ์๋์ง๋ฅผ ํ์ธํฉ๋๋ค. m.find(K) ์ด์ฉ์ ๋ง์ฝ ์๋ค๋ฉด ํด๋น iterator๋ฅผ ๋ฐํํ๋ฉฐ, ์๋ค๋ฉด m.end()๊ฐ์ ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ด ์๋ค๋ฉด m.find(K) != m.end(), ์๋ค๋ฉด m.find(K) == m.end()๋ฅผ ๋ง์กฑํ ๊ฒ์ ๋๋ค.
์ด๋, ์์๋ pair ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
cout << (m.find(K))->first << endl; // key๊ฐ K์ธ ์์์ key ์กฐํ
cout << (m.find(K))->second << endl; // key๊ฐ K์ธ ์์์ value ์กฐํ
cout << (*m.find(K)).first << endl; // key๊ฐ K์ธ ์์์ key ์กฐํ
cout << (*m.find(K)).second << endl; // key๊ฐ K์ธ ์์์ value ์กฐํ
๊ฐ๋ง ์กฐํํ๊ณ ์ถ์ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ฐฐ์ด์์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ๋ฏ์ด m[K] ํํ๋ก๋ ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
cout << m[K] << endl; // key๊ฐ K์ธ ์์์ value ์กฐํ
- iterator๋ฅผ ์ด์ฉํ treemap์ key ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ํ
C++์์๋ vector, stack๋ฑ์ ์ปจํ ์ด๋๋ค์ iterator๋ผ๋ ๋ฐ๋ณต์๋ฅผ ์ด์ฉํด ์ํ๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ํ์ต๋๋ค. ๊ทธ ์ค์์๋ treemap์ iterator๋ฅผ ์ด์ฉํ์ฌ ์ํํ๊ฒ ๋๋ฉด, ์๋์ผ๋ก key ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ํ๊ฐ ๋ฉ๋๋ค.
map์ iterator๋ฅผ ์ด์ฉํด ์ํํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m; // ์ ์ ์์ ๊ด๋ฆฌํ treemap์ ์ ์ธํฉ๋๋ค.
m.insert({5, 6});
m.insert({2, 2});
m.insert({10, 1});
// Iterator๋ฅผ ์ด์ฉํ map ์ปจํ
์ด๋ ๋ด์ ์์๋ค ์ํ
map<int, int>::iterator it;
// key ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ํํ๊ฒ ๋๋ฏ๋ก
// (2, 2), (5, 6), (10, 1) ์์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
for(it = m.begin(); it != m.end(); it++) {
cout << (it -> first) << " " << (it -> second) << endl;
}
return 0;
}
๋ง์ฝ ์ํ ์ ์ map์ด ๋น์ด์๋์ง๋ฅผ ์๊ณ ์ถ๋ค๋ฉด, empty()ํจ์๋ size()๊ฐ 0์ธ์ง๋ฅผ ํ์ธํ๋ฉด ๋ฉ๋๋ค.
์ถ์ฒ ์ฝ๋ํธ๋ฆฌ
'๐ ์๊ณ ๋ฆฌ์ฆ > Code Tree' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํธ๋ฆฌ] Hash Set (0) | 2023.02.09 |
---|---|
[์ฝ๋ํธ๋ฆฌ] TreeMap ์ฐ์ต๋ฌธ์ (0) | 2023.02.09 |
[์ฝ๋ํธ๋ฆฌ] HashMap ์ฐ์ต๋ฌธ์ (0) | 2023.02.09 |
[์ฝ๋ํธ๋ฆฌ] Hash Map (0) | 2023.02.07 |
[์ฝ๋ํธ๋ฆฌ] ๊ณต๊ฐ๋ณต์ก๋ (0) | 2023.02.06 |