도순씨의 코딩일지
C++ :: STL map, multimap 컨테이너 본문
🌼 map 컨테이너
map 컨테이너는 원소를 key와 value의 쌍으로 저장합니다. 원소의 key는 컨테이너에 중복저장될 수 없습니다. 만약 중복 key를 사용해야 한다면 multimap을 사용하면 됩니다.
다음은 map 컨테이너 생성과 원소 저장을 위한 insert() 함수입니다.
⭐️ map의 insert()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <iostream>
#include <map>
using namespace std;
int main(void){
map<int, int> m;
m.insert(pair<int, int>(5, 100));
m.insert(pair<int, int> (3, 100));
m.insert(pair<int, int> (8, 30));
m.insert(pair<int, int> (4, 40));
m.insert(pair<int, int> (1, 70));
m.insert(pair<int, int> (7, 100));
pair<int, int> pr(9, 50);
m.insert(pr);
map<int, int> :: iterator iter;
for(iter = m.begin() ; iter != m.end() ; ++iter)
cout << "(" << (*iter).first << ',' << (*iter).second << ")" << " ";
cout << endl;
for(iter = m.begin() ; iter != m.end() ; ++iter)
cout << "(" << iter->first << ',' << iter->second << ")" << " ";
cout << endl;
return 0;
}
|
cs |
⭐️ map의 insert() 실행결과
1
2
|
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50)
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50)
|
cs |
다음 예제는 map의 [] 연산자를 사용한 원소의 추가와 value 갱신 예제입니다.
⭐️ map의 [] 연산자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <iostream>
#include <map>
using namespace std;
int main(void){
map<int, int> m;
m[5] = 100;
m[3] = 100;
m[8] = 30;
m[4] = 40;
m[1] = 70;
m[7] = 100;
m[9] = 50;
map<int, int> :: iterator iter;
for(iter = m.begin() ; iter != m.end() ; ++iter)
cout << "(" << iter -> first << ',' << iter -> second << ")" << " ";
cout << endl;
m[5] = 200;
for(iter = m.begin(); iter != m.end() ; ++iter)
cout << "(" << iter->first << ',' << iter->second << ")" << " ";
cout << endl;
return 0;
}
|
cs |
⭐️ map의 [] 연산자 실행결과
1
2
|
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50)
(1,70) (3,100) (4,40) (5,200) (7,100) (8,30) (9,50)
|
cs |
다음 예제는 find(), lower_bound(), upper_bound(), equal_range() 사용 예제입니다.
⭐️ map의 찾기 관련 멤버 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <iostream>
#include <map>
using namespace std;
int main(void){
map<int, int> m;
m[5] = 100;
m[3] = 100;
m[8] = 30;
m[4] = 40;
m[1] = 70;
m[7] = 100;
m[9] = 50;
map<int, int> :: iterator iter;
for(iter = m.begin() ; iter != m.end() ; ++ iter)
cout << "(" << iter->first << ',' << iter->second << ")" << " ";
cout << endl;
iter = m.find(5);
if(iter != m.end())
cout << "key 5에 매핑된 value: " << iter -> second << endl;
map<int, int> :: iterator lower_iter;
map<int, int> :: iterator upper_iter;
lower_iter = m.lower_bound(5);
upper_iter = m.upper_bound(5);
cout << "구간 [lower_iter, upper_iter)의 순차열: ";
for(iter = lower_iter ; iter != upper_iter ; ++iter)
cout << "(" << iter->first << ',' << iter->second << ")";
cout << endl;
pair<map<int, int> :: iterator, map<int, int>::iterator > iter_pair;
iter_pair = m.equal_range(5);
cout << "구간 [iter_pair.first, iter_pair.second) 의 순차열: ";
for(iter = iter_pair.first ; iter != iter_pair.second ; ++iter)
cout << "(" << iter->first << ',' << iter->second << ") ";
cout << endl;
return 0;
}
|
cs |
⭐️ map의 찾기 관련 멤버 함수 실행결과
1
2
3
4
|
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50)
key 5에 매핑된 value: 100
구간 [lower_iter, upper_iter)의 순차열: (5,100)
구간 [iter_pair.first, iter_pair.second) 의 순차열: (5,100)
|
cs |
🌼 multimap 컨테이너
multimap 컨테이너는 map 컨테이너와 다르게 중복 원소(key)를 허용합니다.
다음 예제는 count() find() 멤버 함수를 사용하였습니다.
⭐️ multimap의 count()와 find()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>
#include <map>
using namespace std;
int main(){
multimap<int, int> mm;
mm.insert(pair<int, int>(5, 100));
mm.insert(pair<int, int>(3, 100));
mm.insert(pair<int, int>(8, 30));
mm.insert(pair<int, int>(3, 40));
mm.insert(pair<int, int>(1, 70));
mm.insert(pair<int, int>(7, 100));
mm.insert(pair<int, int>(8, 50));
multimap<int, int> :: iterator iter;
for(iter = mm.begin() ; iter != mm.end() ; ++iter)
cout << "(" << iter->first << ',' << iter->second << ")" << " ";
cout << endl;
cout << "key 3의 원소의 개수는 " << mm.count(3) << endl;
iter = mm.find(3);
if(iter != mm.end())
cout << "첫 번째 key 3에 매핑된 value: " << iter->second << endl;
return 0;
}
|
cs |
⭐️ multimap의 count()와 find() 실행결과
1
2
3
|
(1,70) (3,100) (3,40) (5,100) (7,100) (8,30) (8,50)
key 3의 원소의 개수는 2
첫 번째 key 3에 매핑된 value: 100
|
cs |
📚 출처
공동환(2012), 뇌를 자극하는 C++ STL, 한빛미디어.
'𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆 > 𝐂++' 카테고리의 다른 글
C++ :: STL 원소를 수정하는 알고리즘 & 제거 알고리즘 (0) | 2020.09.24 |
---|---|
C++ :: STL 원소를 수정하지 않는 알고리즘 (0) | 2020.09.23 |
C++ :: STL multiset 컨테이너 (0) | 2020.09.18 |
C++ :: STL set 컨테이너 (0) | 2020.09.17 |
C++ :: STL list 컨테이너 (0) | 2020.09.15 |
Comments