C++ STL 프로그래밍(해시 맵 hash_map)






7. 해시 맵(hash_map)



7.1 시퀀스 컨테이너와 연관 컨테이너
    - STL컨테이너는 시퀀스 컨테이너와 연관 컨테이너로 나눈다.
    - 시퀀스 컨테이너 : 순서대로 자료 보관(iterator 사용). list, vector, deque
    - 연관 컨테이너 : key와 value 짝을 이뤄 자료 보관. 탐색이 빠른 대용량 자료 저장
        


7.2 연관 컨테이너로는 무엇이 있을까?
    - 키 값이 중복되지 않을 때 사용 : map, set, hash_map, hash_set
    - 키 값이 중복될 때 사용(multi) : multi_map, multi_set, hash_multimap, hash_multiset

    7.2.1 map, set과 hash_map, hash_set 의 차이
        - map, set : 자료를 정렬해 저장하므로 탐색 시 정렬 순서대로 순회
        - hash_map, hash_set : 정렬 없이 저장. hash 자료구조를 사용해 탐색이 더 빠르다.

    7.2.2 hash_map, hash_set 은 표준이 아니다
        - 표준에 들아갈 예정이고 현업에서 매우 유용
        - 2007 에서 unordered_map, unordered_set 이름으로 사용되었다.


7.3 hash_map의 자료구조
    - '해시 테이블'. Key값 해시 함수에 대입 -> 버킷 번호 -> 버킷의 빈 슬롯에 저장
        


7.4 hash_map을 사용할 때
    - 많은자료(천 이상)를 저장하고, 검색이 빨라야 할 때
    - 자료 삽입, 삭제가 적을 때


7.5 hash_map 사용방법
    - 헤더 파일 포함 : #include <hash_map>
    - 네임스페이스 선언 : using namespace stdext;
    - 선언 : hash_map<Key 자료형, Value 자료형> 변수이름;
    - 동적할당 : hash_map<자료형, 자료형>* 변수이름 = new hash_map<자료형, 자료형>;

    7.5.1 hash_map의 주요 멤버들
        - find, lower_bound, upper_bound 가 다른 컨테이너와 다른 점
        - push_back 과 같은 추가 함수는 삭제되고insert로 추가 한다.
        


    7.5.2 추가 insert 세 가지
        


    7.5.3 삭제 erase 세 가지
        - 첫 번째, 두 번째 삭제는 삭제된 요소의 다음을 가리키는 반복자 리턴
        - 세 번째 삭제는 삭제된 개수 리턴
        


    7.5.4 검색 find 두 가지
        
        - Key와 같은 요소를 찾으면 그 요소의 반복자 리턴, 찾지 못하면 end()리턴
        - 두 방법 다 key 값은 변경 불가능(key 앞에 const가 있음을 확인하자)
        - 첫 번째는 value 값 변경 가능
        - 두 번째는 value 값 변경 불가능
            


    7.5.5 lower_bound와 upper_bound
        - key 값으로 해당 요소의 시작 위치를 얻을 때 사용하는 멤버들
        - key 값 비교는 수학적 크기가 아닌, 저장된 요소의 위치의 높이를 의미한다.

        lower_bound : 키가 있으면 해당 위치 반복자 리턴
        upper_bound : 키가 있으면 그 다음 위치 반복자 리턴
            - 저장 요소를 나누어 처리 시 유용(3000개의 캐릭 정보를 100개씩 나누어 처리)





















댓글