언어/Basic C++

[Basic C++] #39_multimap, 연관 컨테이너, 중복 허용

Hardii2 2022. 6. 24. 02:14

 

[Basic C++] #39_multimap, 연관 컨테이너, 중복 허용

 

C++ 개발에서 표준 라이브러리(STL)의 "multimap"에 대해 알아보겠습니다.

"전문가를 위한 C"의 16 항목, "컨테이너와 반복자 이해하기"에 해당하는 내용입니다.

 


 

Overview

 

  1. 개념
  2. 반복자

 

#0. 개념

 

 

[Basic C++] #38_map, 연관 컨테이너

[Basic C++] #38_map, 연관 컨테이너 C++ 개발에서 표준 라이브러리(STL)의 "map"에 대해 알아보겠습니다. "전문가를 위한 C"의 16 항목, "컨테이너와 반복자 이해하기"에 해당하는 내용입니다. map, 연관 컨

webddevys.tistory.com

 

  • 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 객체를 반환합니다.