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<int, int> mm; mm.insert(pair<int, int>(5, 100)); mm.insert(pair<int, int>(3, 100)); mm.insert(pair<int, int>(8, 100)); mm.insert(pair<int, int>(3, 100)); // 중복 mm.insert(pair<int, int>(1, 100)); mm.insert(pair<int, int>(7, 100)); mm.insert(pair<int, int>(8, 100)); // 중복 // key 3의 원소의 개수 count() 멤버함수 사용 cout<<"key 3의 원소의 개수 : "<< mm.count( 3 )<<endl; // find() 멤버함수 사용 // 찾은 key원소의 처음 반복자리턴(중복 되있으니까) // 즉! (3, 100)을 가르키는 반복자 multimap<int, int>::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<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)); // 중복 // lower_bound(), upper_bound() 멤버함수 사용 multimap<int, int>::iterator Iter_lower = mm.lower_bound( 3 ); multimap<int, int>::iterator Iter_upper = mm.upper_bound( 3 ); multimap<int, int>::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<int, int>::iterator, multimap<int, int>::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()가 아닙니다.
'0x0001 > STL' 카테고리의 다른 글
[C++ STL] 연관 컨테이너 - 맵(map) (0) | 2019.02.16 |
---|---|
[C++ STL] 연관 컨테이너 - 멀티셋(multiset) (0) | 2019.02.16 |
[C++ STL] 연관 컨테이너 - 셋(set) (0) | 2019.02.16 |
[C++ STL] 시퀀스 컨테이너 - 리스트(list) (0) | 2019.02.16 |
[C++ STL] 시퀀스 컨테이너 - 덱(deque) (0) | 2019.02.16 |