map 이란?

- 각 노드가 key와 value가 쌍으로 이루어진 트리

- key 값을 기준으로 정렬

- 중복을 허용하지않음

- 레드블랙트리로 구현되어 있음

- default 로 오름차순 정렬

 

map & multimap 사용방법

헤더추가

- #include<map>

-선언 방법

map <데이터타입, 데이터타입>

데이터 추가 방법

m.insert({first data, second data}); m.insert({ 1, "안녕" });
m.insert(pair<데이터타입, 데이터타입>(first data, second data)); m.insert(pair<int, string>(6, "안녕"));
m.insert(make_pair(first data, second data)); m.insert(make_pair(7, "뀨꾸"));
m[first data] = second data; m[100] = "까까";

데이터 접근 방법

1. m[first data] 방식 활용

cout << m[first data] <<endl;

2. 범위 기반 반복문 활용

for(auto : m)

cout << i.first << i.second <<endl;

3. 인덱스 기반 iterator 활용

for(auto iter=m.begin(); iter!= m.end();iter++)

cout<< iter->first << iter->second<<endl;

데이터 삭제

key 값 기준으로 삭제

erase(key 값)

모든 데이터 삭제

erase(m.begin(), m.end());

데이터가 있는지 확인하기

if(m.find(first 데이터) !=m.end())

cout<<"찾았습니다"<<endl;

else

cout<<"데이터가 없습니다."<<endl;

 

multimap 사용법 map 과 동일

대신 중복 키 가능

 

총 코드

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

int main()
{
	map<int, string> m;
	
	

	m.insert({ 1, "안녕" });
	m.insert({ 2, "하세요" });
	m.insert({ 5, "맵이에오" });
	m.insert({ 3, "저는" });

	m.insert(pair<int, string>(6, "안녕"));
	m.insert(make_pair(7, "뀨꾸"));
	
	cout << "m[first data] 방식 출력" << endl;
	m[100] = "이렇게도";
	m[101] = "됩니다";

	cout << m[1] << endl;
	cout << m[101] << endl;
	cout << endl << endl;
	cout << "범위 기반 반복문 방식 출력" << endl;
	for (auto i : m)
		cout <<i.first <<", "<< i.second << endl;
	cout << "인덱스 기반 iterator 방식 출력" << endl;
	for (auto iter = m.begin(); iter != m.end(); iter++)
		cout << iter->first << ", " << iter->second << endl;
	cout << endl << endl;

	if (m.find(5) != m.end())
		cout << "찾았습니다." <<endl;
	else
		cout << "값이 없습니다." << endl;
	

	m.erase(1);
	m.erase(3);
	cout << "erase 1, 3" << endl;
	for (auto i : m)
		cout << i.first << ", " << i.second << endl;

	
	m.erase(m.begin(), m.end());
	cout << "erase all" << endl;
	for (auto i : m)
		cout << i.first << ", " << i.second << endl;
	cout << endl;


	multimap<int, string> m1;

	
	m1.insert(make_pair(1, "멀티 맵"));
	m1.insert(make_pair(1, "중복키 가능"));
	m1.insert(make_pair(2, "이상 끝"));

	for (auto i : m1)
		cout << i.first << ", " << i.second << endl;


}

+ Recent posts