multimap
C++ STL의 multimap에 대해서 정리했습니다.
multimap
multimap은 map과 매우 비슷한 컨테이너다.
차이점은 multimap은 원소의 중복을 허용한다는 점이다.
인터페이스
multimap은 중복을 허용한다는 특징으로 인해 [] 연산자를 지원하지 않는다.
따라서 연관 컨테이너가 지원하는 find(), lower_bound(), upper_bound(), equal_range()를 사용해야 한다.
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
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
multimap<int, int> mm;
mm.insert(pair<int, int>(1, 10));
mm.insert(pair<int, int>(2, 20));
mm.insert(pair<int, int>(3, 30));
mm.insert(pair<int, int>(4, 40));
mm.insert(pair<int, int>(3, 300));
mm.insert(pair<int, int>(5, 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에 매핑된 값은 " << iter->second << "입니다." << endl;
}
lower_bound()와 upper_bound() 그리고 equal_range()
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
#include <iostream>
#include <map>
using namespace std;
int main(void)
{
multimap<int, int> mm;
mm.insert(pair<int, int>(1, 10));
mm.insert(pair<int, int>(2, 20));
mm.insert(pair<int, int>(3, 30));
mm.insert(pair<int, int>(4, 40));
mm.insert(pair<int, int>(3, 300));
mm.insert(pair<int, int>(5, 50));
multimap<int, int>::iterator lower_iter = mm.lower_bound(3);
multimap<int, int>::iterator upper_iter = mm.upper_bound(3);
cout << "구간 [lower_iter, upper_iter)의 순차열: ";
for(multimap<int, int>::iterator iter = lower_iter; iter != upper_iter; iter++)
cout << "[ " << iter->first << ", " << iter->second << " ] ";
cout << endl;
pair<multimap<int, int>::iterator, multimap<int, int>::iterator> pr = mm.equal_range(3);
cout << "구간 [pr.first, pr.second)의 순차열: ";
for(multimap<int, int>::iterator iter = pr.first; iter != pr.second; iter++)
cout << "[ " << iter->first << ", " << iter->second << " ] ";
cout << endl;
}
정리
multimap은 연관 컨테이너이자 노드 기반 컨테이너다.multimap은 원소의 중복을 허용한다.multimap은map과 달리[]를 사용할 수 없다.
$12 + 34 = \sqrt{12}$
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.
