multimap은 여러 key를 중복해서 저장할 수 있습니다. map과 다른 유일한 차이점 입니다.

중복 key를 허용하는 multimap은 [] 연산자를 제공하지 않습니다. 

 

 

[ 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
29
#include <iostream>
#include <map>
using namespace std;
 
int main(){
 
    multimap<intint> mm;
    mm.insert(pair<intint>(5, 100));
    mm.insert(pair<intint>(3, 100));
    mm.insert(pair<intint>(8, 100));
    mm.insert(pair<intint>(3, 100)); // 중복
    mm.insert(pair<intint>(1, 100));
    mm.insert(pair<intint>(7, 100));
    mm.insert(pair<intint>(8, 100)); // 중복
 
     // key 3의 원소의 개수 count() 멤버함수 사용
    cout<<"key 3의 원소의 개수 : "<< mm.count( 3 )<<endl;
 
    // find() 멤버함수 사용
    // 찾은 key원소의 처음 반복자리턴(중복 되있으니까)
    // 즉! (3, 100)을 가르키는 반복자
    multimap<intint>::iterator Iter = mm.find( 3 );
    if( Iter != mm.end() ){
        cout<<"key 3에 매핑된 value : "<< Iter->second << endl;
    }else{
        cout<<"못찾았음!!"<<endl;
    }
 
    system("pause");
    return 0;
}

 

 

 

[ multimap의 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <map>
using namespace std;
 
int main(){
 
    multimap<intint> mm;
    mm.insert(pair<intint>(5, 100));
    mm.insert(pair<intint>(3, 100));
    mm.insert(pair<intint>(8, 30));
    mm.insert(pair<intint>(3, 40)); // 중복
    mm.insert(pair<intint>(1, 70));
    mm.insert(pair<intint>(7, 100));
    mm.insert(pair<intint>(8, 50)); // 중복
 
 
 
    // lower_bound(), upper_bound() 멤버함수 사용
    multimap<intint>::iterator Iter_lower = mm.lower_bound( 3 );
    multimap<intint>::iterator Iter_upper = mm.upper_bound( 3 );
 
    multimap<intint>::iterator Iter;
    cout<<"구간 [lower_bound(), upper_bound()) 순차열, 원소값은 ";
    for( Iter = Iter_lower; Iter != Iter_upper; ++Iter ){
        cout<<"("<< Iter->first <<", " << Iter->second <<")"<<" ";
    }
    cout<<endl;
 
    
    
    // equal_range() 멤버 함수 사용
    pair< multimap<intint>::iterator, multimap<intint>::iterator > pr;
    pr = mm.equal_range( 8 );
    if( pr.first != pr.second ){
 
        cout<<"구간 [pr.first, pr.second) 순차열, 원소값은 ";
        for( Iter = pr.first; Iter != pr.second; ++Iter ){
            cout<<"("<< Iter->first <<", " << Iter->second <<")"<<" ";
        }
 
    }else{
        cout<<"순차열을 찾을 수 없습니다.";
    }    
    cout<<endl;
 
 
    system("pause");
    return 0;
}

 

 

 

시퀀스 컨테이너와 연관 컨테이너의 차이점

 

: 시퀀스 컨테이너는 원소의 상대적인 순서가 유지되며 연관 컨테이너는 특정 정렬 기준에 따라 원소가 정렬 됩니다.

 

 

연관 컨테이너의 lower_bound()와 upper_bound()의 반환값

 

: lower_bound()는 찾는 원소의 순차열 시작반복자를 반환하며 upper_bound()는 찾는 원소의 순차열 끝 반복자를 반환 합니다. 원소를 찾지 못하면 찾는 원소의 순차열 끝 반복자를 반환합니다. 

 

      begin Iter                                end 

ex ) 10      30      30      40      50      60 

             lower        upper

 

원소를 찾지 못하면 upper가 가리키는 반복자를 리턴합니다. end()가 아닙니다.

 

+ Recent posts