이번 포스팅에서는 STL의 맵(Map)에 대해서 정리해 보려고 한다. 첨부한 이미지는 포큐 아카데미의 C++ 강의 내용 화면이다.
맵(Map)
맵은 STL 컨테이너에서 Key-Value 형태로 데이터를 저장하는 구조이다. 키는 중복될 수 없다. C++맵은 키 값을 기준으로 자동으로 정렬이 되는 컨테이너이다. 그리고 맵은 이진 탐색 트리(BST) 기반이다.
빈 맵을 만들 때는 key와 value의 타입을 반드시 선언해 주어야 한다. 그리고 어떤 맵과 같은 크기 및 데이터를 가지는 맵을 초기값으로 생성해서 맵을 만들 수도 있다.
두 개의 데이터를 하나의 단위로 저장하는 구조를 pair 라고 한다.
맵에 새로운 요소를 삽입하려고 할 때에는 insert() 메서드를 사용한다. 이 때 반환은 반복자(iterator)와 bool 값을 하며 키를 중복으로 삽입할 수 없다.
맵에서 키에 해당되는 값을 참조로 반환할 때 operator[](배열)를 사용한다. 만약에 그 키 값이 없는 경우라면 새 요소를 삽입하며, 기존에 키가 이미 있으면 그 값을 덮어쓰게 된다.
맵에서 특정 key 값을 가지고 그에 대응하는 value를 찾기 위해서 사용하는 메서드가 find() 메서드이다. 만약 찾지 못하면 end()를 반환한다.
두 맵의 키과 값을 서로 맞바꾸는 메서드는 swap()이다. swap() 메서드는 메모리 주소만 서로 바꿔주기 때문에 연산이 오래 걸리지는 않는다.
맵에서 키 값을 가지고 요소를 지워주어야 할 때 erase() 메서드를 사용한다.
맵의 장점과 단점은 다음과 같은 것들이 있다.
- 장점
- std::list나 std::vector보다 탐색 속도가 더 빠름
- 단점
- 자동으로 정렬됨 (장점이자 단점)
- 해쉬맵(hashmap)이 아님. 따라서 O(1)이 아님
셋은 맵과 비슷한 자료구조이다. 맵처럼 정렬되는 컨테이너며 중복되지 않는 키를 요소로 저장한다. 맵에서 값을 뺀 것이 셋이라고 보면 된다. 차이가 있다면 셋은 자료구조를 하나만 사용한다.
이외에도 큐, 스택, 리스트 등이 있는데 이 부분은 자료구조에서 충분히 다루었었던 개념이고 벡터, 맵, 셋에 비해 많이 쓰이지 않으므로 설명을 생략한다.
참고자료
- <C++ 언매니지드 프로그래밍> 포큐 아카데미
'Prog. Langs & Tools > C++' 카테고리의 다른 글
[C++] Ch13. C++ 최신 문법 - Part1 (0) | 2021.05.31 |
---|---|
[C++] Ch12. 템플릿(Template) 프로그래밍 (0) | 2021.05.03 |
[C++] Ch10. STL - 벡터(Vector) (0) | 2021.03.31 |
[C++] Ch09. 예외(Exception) (0) | 2021.01.11 |
[C++] Ch08. 인라인 함수, static 키워드 (0) | 2020.11.30 |