map이란?
: 트리 , 즉 계층 구조로 이루어진 pair형태의 stl임.
key값과 value값을 가지고 있으며,
루트 노드를 기준으로 해서 삽입, 삭제, 탐색이 이루어지므로, logN의 비용을 가짐.
삽입하는 방법.
: 3가지가 있음.
insert, 인덱스 접근, make_pair
![](https://media.vlpt.us/images/kwt0124/post/90b0f8ae-3664-44a6-9dee-a102e42229a9/image.png)
주의할 점 : 인덱스 접근의 경우, 삽입이든, 뭘 하든 디폴트값 0 으로 second값이 삽입됨.
![](https://media.vlpt.us/images/kwt0124/post/f4a970c3-dd07-4e99-85ee-23095a1bc6bc/image.png)
![](https://media.vlpt.us/images/kwt0124/post/827b23db-4882-4ca4-ac4d-f94c7e5af2cd/image.png)
map을 쓸까? unordered_map을 쓸까?
-> 핵심은 정렬 유무에 차이가 있음.
수많은 데이터 중에서 , 디버깅 중 원하는 데이터의 키값을 정렬된 상태에서 보고 싶다면 : map이지만,
그냥 굳이 속도 차원으로 보자면 unordered_map을 사용함.
- 일단 밑의 예시를 보면 key값 2개일때 map은 가능하지만, hash는 불가능하다는 것을 통해
- map을 먼저 쓰고, 테스트 케이스에서 시간초과 날 경우에!
- hash를 사용하도록 하자!
map 우선순위 변경하기
- map<string, int, greater>m;
: 이렇게 하면 키값의 내림차순으로 정렬된다.
- value값
map 삭제하기
- erase 함수를 사용하자.
m.erase( key값 )
기존의 값 변경 불가능 한 삽입
![](https://velog.velcdn.com/images%2Fkwt0124%2Fpost%2F32c124d8-dbe3-4fae-bfea-641032152326%2Fimage.png)
기존의 값 변경 가능한 삽입
![](https://velog.velcdn.com/images%2Fkwt0124%2Fpost%2F94d9be65-feed-4823-9986-6bce63e023bd%2Fimage.png)
key값은 2개로 사용할때
-
map은 가능하지만!
![](https://velog.velcdn.com/images%2Fkwt0124%2Fpost%2Fd4f2f081-af6a-4b1b-9637-95809fd05b53%2Fimage.png)
-
hash는 안된다는 점을 알고 있어야 한다.
![](https://velog.velcdn.com/images%2Fkwt0124%2Fpost%2Fcbceacc7-3271-468b-89a6-ebf404a0a9c4%2F7.PNG)
key값은 1개이고, value가 2개일때
-
map은 가능하다.
![](https://velog.velcdn.com/images%2Fkwt0124%2Fpost%2F92a6c2f5-cd6e-4ef4-b1b2-f7eeccbaa154%2Fimage.png)
-
hash도 가능하다.
![](https://velog.velcdn.com/images%2Fkwt0124%2Fpost%2F9e212b28-71e4-4eab-ba7c-b1a72662c135%2Fimage.png)