[Basic C++] #39_multimap, 연관 컨테이너, 중복 허용
C++ 개발에서 표준 라이브러리(STL)의 "multimap"에 대해 알아보겠습니다.
"전문가를 위한 C"의 16 항목, "컨테이너와 반복자 이해하기"에 해당하는 내용입니다.
Overview
- 개념
- 반복자
#0. 개념
- multimap은 키 하나에 2개 이상의 항목을 가질 수 있습니다.
- 그리고 multimap은 map과 마찬가지로 유니폼 초기화를 지원하며 몇 가지 사항만 제외하고 map과 인터페이스가 거의 같습니다.
- 먼저, multimap은 "operator[]"를 지원하지 않습니다. 동일한 키 값에 복수의 항목이 존재하기 때문이죠!
- multimap의 "insert()" 메서드는 무조건 성공합니다. 따라서, 반환 값 또한 반복자 + 성공 여부(boolean)가 아니라, 반복자만 반환합니다.
#1. 반복자
/*
1. iterator lower_bound(const Key& key) :
multimap에 인자로 받은 key에 해당하는 첫 번째 항목을 가리키는 반복자를 반환합니다.
*/
multimap<int, string> mm;
mm.insert(make_pair(40, "Fourty"));
mm.insert(make_pair(40, "Second Fourty"));
mm.insert(make_pair(50, "Fifty"));
mm.insert(make_pair(60, "Sixty"));
mm.insert(make_pair(70, "Seventy"));
// mm의 '[' lower bound 부터 ']' upper bound 까지 first와 second를 출력합니다.
for(auto it = mm.lower_bound(40); it != mm.upper_bound(40); ++it)
cout << it->first << " " << it->second << "\n";
/*
2. pair <const_iterator, const_iterator> equal_range (const Key& key) const :
인자로 받은 Key에 해당하는 lower_bound()와 upper_bound()를 pair 객체로 반환합니다.
*/
// pair의 first는 lower_bound(const Key& key)와 같고 second는 upper_bound(const Key& key)와 같습니다.
for(auto it = mm.equal_range(40).first; it != mm.equal_range(40).second; ++it)
cout << it->first << " " << it->second << "\n";
Details
- 앞서 설명했듯이, multimap은 map과 달리 동일한 키를 갖는 복수의 항목들을 허용합니다. 따라서, 각 항목에 접근하기 까다로워집니다.
- multimap은 "lower_bound(const Key& key)"를 통해 지정된 키 값에 해당하는 항목들 중 첫 번째 항목에 접근 가능하며, "upper_bound(const Key& key)"를 통해 지정된 키 값에 해당하는 마지막 항목 직후를 가리키는 반복자를 제공합니다.
- 추가적으로, "equal_range()"메서드는 first는 lower_bound(), 그리고 second는 upper_bound()를 갖는 pair 객체를 반환합니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #41_unordered_map, 비순차 연관 컨테이너 (0) | 2022.06.28 |
---|---|
[Basic C++] #40_해시함수, 비순차 연관 컨테이너, 해시 테이블 (0) | 2022.06.24 |
[Basic C++] #38_map, 연관 컨테이너 (0) | 2022.06.23 |
[Basic C++] #37_pair (0) | 2022.06.22 |
[Basic C++] #36_forward_list, 순차 컨테이너 (0) | 2022.06.21 |