프로그래밍/c++ STL

[c++ STL] Multimap 기본 사용법 및 예제

rrruu 2020. 2. 4. 10:50
반응형

Multimap은 map이지만 같은 key값에 여러개의

value를 저장할 수 있는 특징을 가졌습니다.

값의 저장 방법은 map과 동일하며 []를 사용하여

자동으로 값을 넣어주는 방법은 사용하지 못합니다.

 

선언방법을 알아봅시다.

 

#include<map>

 

먼저 전처리기에 include를 해야합니다.

int형의 key와 string의 value를 저장하는 m_map라는

이름의 multimap를 만든다고 한다면

 

multimap<int,string> m_map;

 

이런식으로 선언을 하면 됩니다.

 

사용방법을 알아 봅시다.

 

값을 저장하는 방법은 map과

동일하게 make_pair를 사용하여

pair를 만들어 넣어 줍니다.

m_map.insert(make_pair(key,value));

 

지우는방법도 마찬가지로 동일합니다.

erase를 사용하며 iterator로 지우고 싶은

위치를 반환하여 삭제합니다.

multimap<int,string>::iterator iter = m_map.begin();

m_map.erase(iter);

 

key값의 value의 갯수를 반환 할때는

count를 사용하여 반환합니다.

cout<<m_map.count();

 

key값의 첫번째 위치를 반환하는 함수입니다.

m_map.lower_bound(key);

 

key값의 마지막 위치를 반환하는 함수입니다.

m_map.upper_bound(key);

 

안의 값을 모두 지울때는 

clear를 사용하시면 됩니다.

m_map.clear()

 

안의 데이터가 비어 있는지 확인하는 방법도 있습니다.

empty 사용하면 안의 데이터의 수를 반환 하게 됩니다.

if (m_map.empty())

empty자체가 bool타입으로 반환값을 갖기 때문에

이런식으로 조건문으로 사용하시면 됩니다.

 

간단한 예제 입니다.

#include<iostream>
#include<map>
#include<string>

using namespace std;

int main()
{
	multimap<int,string> m_map;

	m_map.insert(make_pair(0, "zero"));
	m_map.insert(make_pair(0, "one"));
	m_map.insert(make_pair(0, "two"));
	m_map.insert(make_pair(1, "zero"));
	m_map.insert(make_pair(1, "one"));
	m_map.insert(make_pair(1, "two"));

	cout << "0 size : " << m_map.count(0) << endl;

	multimap<int,string>::iterator iter = m_map.begin();
	iter++;
	m_map.erase(iter);
	cout << "one 삭제" << endl;

	cout<<"0 size : "<< m_map.count(0) << endl;

	cout << "key 1의 첫번째 값 : " << m_map.lower_bound(0)->second << endl;
	cout << "key 1의 마지막 값 : " << m_map.upper_bound(0)->second << endl;

	cout << "전체순회" << endl;
	for (auto it = m_map.begin(); it != m_map.end(); it++)
	{
		cout <<"["<< it->first <<","<< it->second <<"]"<< endl;
	}
	cout << "0만 순회" << endl;
	for (auto it = m_map.lower_bound(0); it != m_map.upper_bound(0); it++)
	{
		cout << "[" << it->first << "," << it->second << "]" << endl;
	}

	m_map.clear();

	if (m_map.empty())
		cout << "empty!" << endl;

	return 0;
}

실행화면 입니다.

 

반응형