CS/Data Structure

[C++] multimap

Mirab 2021. 4. 28. 18:28

multimap?

multimap은 기본적으로 map과 비슷하지만 다른 부분들이 있다.

비슷한 부분은 [map]에서 확인하자.

1. Key의 중복을 허용한다.

2 [] 연산자를 지원하지 않기 때문에 insert() 멤버 함수로 삽입해야 한다.

 

연습해보기

#include <iostream>
#include <map>
using namespace std;

int main()
{
	// less <
	// left child key < parent key <= right child key
	multimap<int, int> mm;

	//multimap은 [] operator를 제공하지 않는다.
	//mm[5] = 100;
	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));

	for (auto iter = mm.begin(); iter != mm.end(); iter++)
		cout << "(" << iter->first << "," << iter->second << ") ";
	cout << '\n';

	cout << "mm.count(3): " << mm.count(3) << '\n';
	cout << "mm.count(9): " << mm.count(9) << '\n';
	cout << "mm.count(5): " << mm.count(5) << '\n';

	auto iter = mm.find(3);
	if (iter != mm.end())
		cout << "첫 번째 key 3에 매핑된 value: " << iter->second << '\n';
	else
		cout << "key 3이 multimap에 없습니다.\n";
	return 0;
}
(1, 70) (3, 100) (3, 40) (5, 100) (7, 100) (8, 30) (8, 50)
mm.count(3) : 2
mm.count(9) : 0
mm.count(5) : 1
첫 번째 key 3에 매핑된 value : 100
#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));

	for (auto iter = mm.begin(); iter != mm.end(); iter++)
		cout << "(" << iter->first << "," << iter->second << ") ";
	cout << '\n';

	multimap<int, int>::iterator lower_iter = mm.lower_bound(3);
	multimap<int, int>::iterator upper_iter = mm.upper_bound(3);

	cout << "[lower_iter, upper_iter): ";
	for (auto iter = lower_iter; iter != upper_iter; iter++)
		cout << "(" << iter->first << "," << iter->second << ") ";
	cout << '\n';

	auto equal_iter = mm.equal_range(3);
	cout << "[equal_iter.first, equal_iter.second): ";
	for (auto iter = equal_iter.first; iter != equal_iter.second; iter++)
		cout << "(" << iter->first << "," << iter->second << ") ";
	cout << '\n';
	return 0;
}
(1, 70) (3, 100) (3, 40) (5, 100) (7, 100) (8, 30) (8, 50)
[lower_iter, upper_iter): (3, 100) (3, 40)
[equal_iter.first, equal_iter.second): (3, 100) (3, 40)

'CS > Data Structure' 카테고리의 다른 글

[C++] priority_queue  (0) 2021.08.04
[C++] stoi  (0) 2021.05.06
[C++] map  (0) 2021.04.28
[C++] unordered_set  (0) 2021.04.12
[C++] multiset  (0) 2021.04.12