-
[Algorithm/c++] STL: Map, Hash_Map 알아보기Algorithm 2023. 1. 24. 22:15
Map, Hash_Map 톺아보기
1.1 시퀀스 컨테이너와 연관 컨테이너
STL 컨테이너는 크게 시퀀스 컨테이너와 연관 컨테이너로 나눈다.
시퀀스 컨테이너는 vector, list, deque와 같이 순서 있게 자료를 보관한다.
연관 컨테이너는 어떠한 Key와 짝을 이루어 자료를 보관한다. 그래서 자료를 넣거나 빼고 찾을 때는 Key가 필요하다.
1.2 연관 컨테이너
연관 컨테이너로 map, set, hash_map, hash_set이 있다. 이것들은 Key로 사용하는 값이 중복되지 않은 때 사용한다.
만약 중복되는 key를 사용할 때는 컨테이너 앞에 "multi"를 붙인 multi_map, multi_set, hash_multimap, hash_multiset을 사용한다.
1.2.1. map, set과 hash_map, hash_set의 차이
map과 set 컨테이너는 자료를 정렬하여 저장한다. 그래서 반복자로 저장된 데이터를 순회할 때 순서로 순회하지 않고 정렬된 순서로 순회한다. 그에 반해 hash_map, hash_set은 정렬하지 않고 자료를 저장한다. 또 hash라는 자료구조를 사용함으로 원소를 빠르게 검색한다.
1.3 Hash_map의 주요 멤버들
멤버 설명 begin 첫 번째 원소의 랜덤 접근 반복자를 반환 clear 저장한 모든 원소를 삭제 empty 저장한 요소가 없으면 true 반환 end 마지막 원소 다음의(미 사용 영역) 반복자를 반환 erase 특정 위치의 원소나 지정 범위의 원소들을 삭제 find Key와 연관된 원소의 반복자 반환 insert 원소 추가 lower_bound 지정한 Key의 요소가 있다면 해당 위치의 반복자를 반환 rbegin 역방향으로 첫 번째 원소의 반복자를 반환 rend 역방향으로 마지막 원소 다음의 반복자를 반환 size 원소의 개수를 반환 upper_bound 지정한 Key 요소가 있다면 해당 위치 다음 위치의 반복자 반환 2.1. Map의 자료구조와 사용
map의 자료구조는 '트리(tree)'이다.
map은 많은 자료를 정렬하여 저장하고 있고, 빠른 검색을 필요로 할 때 자주 사용한다.
앞서 말했듯이 map은 자료를 저장할 때 내부에서 자동으로 정렬하고 hash_map은 정렬하지 않는다.
2.2. Map 사용방법
보통 map을 사용하는 방법은 아래와 같습니다.
map< key 자료 type, value 자료 type > 변수 이름
Map의 기본 정렬방식은 오름차순이다. 만약 다른 방식으로 정렬하고 싶으면 아래와 같이 하면 된다.
map< key 자료 type, value 자료 type, 비교 함수 > 변수 이름
2.3. Map의 주요 멤버들
멤버 설명 begin 첫 번째 원소의 랜덤 접근 반복자를 반환 clear 저장하고 있는 모든 원소를 삭제 empty 저장 하고 있는 요소가 없으면 true 반환 End 마지막 원소 다음의(미 사용 영역) 반복자를 반환 erase 특정 위치의 원소나 지정 범위의 원소들을 삭제 Find key와 연관된 원소의 반복자 반환 insert 원소 추가 lower_bound 지정한 key의 요소를 가지고 있다면 해당 위치의 반복자를 반환 operator[] 지정한 key 값으로 원소 추가 및 접근 rbegin 역방향으로 첫 번째 원소의 반복자를 반환 rend 역방향으로 마지막 원소 다음의 반복자를 반환 size 원소의 개수를 반환 upper_bound 지정한 key 요소를 가지고 있다면 해당 위치 다음 위치의 반복자 반환 'Algorithm' 카테고리의 다른 글
DFS & BFS 이해하기 (0) 2023.01.30 [Algorithm/C++] Baekjoon Online Judge 2293: 동전1 , 다이나믹 프로그래밍/배낭문제 (0) 2023.01.25 [Algorithm(C++)] 다이나믹 프로그래밍, 배낭 문제 (백준 12865) (0) 2023.01.15 [동적 계획법 : 다이나믹 프로그래밍] BOJ 9095 1,2,3 더하기 (0) 2023.01.08 [Programmers][C++]체육복 (0) 2022.08.19