본문 바로가기

Prog. Langs & Tools/C++

[C++] Ch11. STL - 맵(Map)

이번 포스팅에서는 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)이 아님

셋은 맵과 비슷한 자료구조이다. 맵처럼 정렬되는 컨테이너며 중복되지 않는 키를 요소로 저장한다. 맵에서 값을 뺀 것이 셋이라고 보면 된다. 차이가 있다면 셋은 자료구조를 하나만 사용한다.

이외에도 큐, 스택, 리스트 등이 있는데 이 부분은 자료구조에서 충분히 다루었었던 개념이고 벡터, 맵, 셋에 비해 많이 쓰이지 않으므로 설명을 생략한다.

 

참고자료

  1.  <C++ 언매니지드 프로그래밍> 포큐 아카데미