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;
}