A. STL Container : map
1. map
a. map이란?
🌟 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조
표준 헤더 파일 <map>을 포함하여 사용
ex) std::map<int, std::string>은 정수형 키와 문자열 값으로 이루어진 map
set이랑 거의 동시에 감
개발 초반이나 매니저를 구현할때 사용
b. map의 특징
- 키와 값의 쌍으로 데이터를 저장 (키는 유일)
- 일반적으로 빠른 검색 속도를 제공하는 자료구조
- 내부적으로 레드-블랙 트리(Red-Black Tree)와 같은 균형 이진 탐색 트리가 사용되어 키의 정렬된 상태를 유지
- 따라서 시간복잡도는 O(log n)
c. map의 기능
- 키를 기반으로 한 검색, 추가, 삭제, 수정 등의 연산을 제공
- 데이터의 삽입 시 자동으로 정렬되어 저장
d. map이 필요한 이유
- 키-값 쌍 관리: Map은 키(key)와 값(value)의 쌍을 저장하고 이를 관리하는 자료구조. 이는 데이터를 특정 키에 매핑(mapping)하여 저장하고, 이 키를 통해 해당 값을 검색할 수 있도록 해줌
- 데이터 검색과 업데이트: 맵은 특정 키를 사용하여 저장된 값을 빠르게 검색. 또한, 맵은 키를 사용하여 해당 값의 업데이트 및 수정도 용이
- 유연성과 다양한 용도: 데이터베이스에서 특정 항목을 검색, 저장, 설정 구성을 관리, 알고리즘에서 중간 결과를 저장, 빠른 검색이 필요한 경우 등 다양한 상황에서 활용
- 효율성: 맵은 효율적인 데이터 검색을 위해 해시 테이블(hash table)이나 트리(tree)와 같은 내부 구현을 사용. 이는 많은 데이터에 대해 빠른 검색과 업데이트를 제공
- 중복 키 관리: 맵은 중복된 키를 관리함. 이는 키가 고유해야 하는 경우에 유용해 여러 값을 저장하는 경우, 맵은 각 키에 대해 해당 값의 집합이나 리스트를 관리할 수 있음
e. map의 단점
1) 데이터가 별로 없고, 순회를 주된 목적으로 해야한다면 벡터가 더 나음 (시간 복잡도)
2) C#과의 관계
C#에선 Dictionary가 기본이라 C++에서도 map을 거의 사용하지 않음...
2. map의 연산
a. 추가
key와 value를 짝을 이뤄서 넣어줘야 함 : std::pair<a, b>
여기부터 아래는 설명 -
만약 여기서 페어를 auto와 템플릿을 써서 만든다면
위 코드를 깔끔하게 만들면 첫 번째 사진처럼 된다!
b. 찾기
1) find
이미 레드-블랙 트리로 정렬이 되어있기 때문에 굉장히 빠르다 : 0(logN)
2) 임의접근
만약 여기 없는 키값을 넣은 경우엔 값을 가져오는게 아닌 추가해버림
💥 하지만 언리얼에선 그냥 크래시나버림 -> stl의 기능이 다른 경우가 있다
ex) m.empty()는 stl : 데이터 유무를 판별 / unreal : 데이터를 날림
c. 삭제
erase로 삭제하면 됨
d. 순회
만약 map이 순회가 주된 업무면 벡터보다 느림
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -
어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프
www.inflearn.com
'자료구조와 알고리즘 > Data Structure' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] STL Container : map, hash_map 실습 (75강) (0) | 2024.03.25 |
---|---|
[게임 프로그래머 입문 올인원] STL Container : hash_map (74강) (0) | 2024.03.25 |
자료구조 개요 (0) | 2024.02.23 |
[게임 프로그래머 입문 올인원] 트리 자료구조 : 레드 블랙 트리 (72강) (0) | 2024.02.22 |
[게임 프로그래머 입문 올인원] 트리 자료구조 : 이진 탐색 트리 (70, 71강) (0) | 2024.02.22 |