한 쌍의 Key와 Value를 만들어 쉽게 Value를 찾고 Key를 찾기 위해 우리는 Map이라는 Container를 사용한다.
Index를 통해 Value를 찾는 Vector와 비슷하지만 차이점을 가지고 있다.
📒Map Container
✍Map Container이란?
자료구조 트리로써 완전 이진트리다. 노드 기반으로 구성되어있으며 노드는 [Key, Value]의 Pair로 구성되어있다.
✍특징
📌특징
- 크기가 가변적이다
- Vector와 같이 동적할당이 가능하다
- 정렬된다.
-데이터의 삽입과 동시에 Key값을 기준으로 오름차순으로 정렬된다.
- Key와 Value로 이루어져 Pair 객체 형태로 저장된다.
- 노드 기반의 완전 이진 트리 구조다
- Key는 고유한 값으로써 중복이 불가능하다.
- multimap에서는 가능하다
📌헤더파일
#include< map >
std::map으로써 using namespace std를 사용하면 편하다.
✍사용방법
📌생성
- map<type1, type2> name
- map < type1> name(pred)
- map< type1> name(name2)
📌삽입과 삭제
- insert 멤버 함수
- map.insert()의 형태로써 ()안에는 pair 형태의 pair<type1, type2>( , ) 또는 Dictionary 형태의 { , }이 들어간다.
- Operator[]를 통한 삽입 수정
- name[key]=value를 통해 map에 Data를 삽입하거나 수정할 수 있다.
- Clear()
- 저장하고 있는 모든 원소 삭제
- erase(start, end)
- 특정위치의 원소나 범위의 원소 삭제
📌기타 멤버함수
- begin()
- 첫 번째 원소의 반복자를 리턴한다.
- end()
- 마지막 원소의 끝부분 반복자를 리턴한다.
- empty()
- Map이 비어있는지 확인한다.
- find()
- Key값을 가진 요소를 찾는다.
- swap()
- 서로 값을 바꾼다.
이 외에도 많은 멤버함수가 Map에는 사용되고 있고, 멤버함수를 이용해 더 손쉬운 코딩을 할 수 있다.
📌순환
반복문을 통하여 데이터에 접근한다.
for(auto iter: name) // name은 map type의 변수명
{
cout<<iter.first<<" "<<iter.second<<endl;
} // Pair와 같이 frist와 second를 사용하여 Key와 Value에 접근할 수 있다.
여러가지 Container 형태의 변수가 있지만 Map처럼 고유한 Key와 그에 맞는 Value를 가지고 있는 변수를 활용한다면 알고리즘 문제를 더 효율적으로 풀 수 있을 것이다.