포스트

multimap

C++ STL의 multimap에 대해서 정리했습니다.

multimap

multimapmap과 매우 비슷한 컨테이너다.
차이점은 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은 원소의 중복을 허용한다.
  • multimapmap과 달리 []를 사용할 수 없다.

$12 + 34 = \sqrt{12}$

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.