[C++STL] 연관 컨테이너 - multimap

박남호·2022년 12월 9일
0

multimap은 중복 key를 허용하며 [] 연산자를 제공하지 않는다. 아래는 multimap에서 count와 find 멤버 함수를 사용한 예제이다.

#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>(4, 40));
	mm.insert(pair<int, int>(1, 70));
	mm.insert(pair<int, int>(7, 30));
	mm.insert(pair<int, int>(3, 30));
	mm.insert(pair<int, int>(3, 50));
	map<int, int>::iterator iter;
	for (iter = mm.begin(); iter != mm.end(); ++iter)
	{
		cout << "key : " << iter->first << "    " << "value : " << iter->second << endl;
	}
	cout << "key 3의 원소의 개수는 :" << mm.count(3) << endl;
	iter = mm.find(3);
	if (iter != mm.end()) 
	{
		cout << "첫번째 key 3에 매핑된 value :" << iter->second << endl;
	}
	return 0;
}

iter = mm.find(3)에서 iter는 key 3의 첫 번째 반복자이다. key 3이 없다면 mm.end()이다. multimap이 중복 키를 허용하므로 중복 키 검색 함수 lower_bound(), upper_bound(), equal_range()는 multimap에서 유용하게 사용된다. 아래는 multimap의 중복 키를 검색하는 예제이다.

#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>(4, 40));
	mm.insert(pair<int, int>(1, 70));
	mm.insert(pair<int, int>(7, 30));
	mm.insert(pair<int, int>(3, 30));
	mm.insert(pair<int, int>(3, 50));
	map<int, int>::iterator iter;
	map<int, int>::iterator lower_bound;
	map<int, int>::iterator upper_bound;
	lower_bound = mm.lower_bound(3);
	upper_bound = mm.upper_bound(3);
	for (iter = lower_bound; iter != upper_bound; ++iter)
	{
		cout << "first : " << iter->first << "    " << "second : " << iter->second << endl;
	}
	cout << endl;

	pair<multimap<int, int>::iterator, multimap<int, int>::iterator> iter_pair;
	iter_pair = mm.equal_range(3);
	for (iter = iter_pair.first; iter != iter_pair.second; ++iter)
	{
		cout << "first : " << iter->first << "    " << "second : " << iter->second << endl;
	}
	cout << endl;
	return 0;
}

출력 결과
first : 3 second : 100
first : 3 second : 30
first : 3 second : 50

first : 3 second : 100
first : 3 second : 30
first : 3 second : 50

lower_bound,upper_bound와 equal_range 모두 중복 키를 검색하는데 유용하다 차이점이라고 한다면 equal_range 같은 키를 가진 중복 원소를 찾는 반면 lower_bound,upper_bound는 구간을 정할수 있다.

profile
NamoPark

0개의 댓글