[Basic C++] #40_해시함수, 비순차 연관 컨테이너, 해시 테이블

2022. 6. 24. 21:41· 언어/Basic C++
목차
  1.  
  2. [Basic C++] #40_해시 함수, 비순차 연관 컨테이너, 해시 테이블

 

[Basic C++] #40_해시 함수, 비순차 연관 컨테이너, 해시 테이블

 

C++ 개발에서 "해시 함수"에 대해 알아보겠습니다.

"전문가를 위한 C"의 16 항목, "컨테이너와 반복자 이해하기"에 해당하는 내용입니다.

 


 

Overview

 

  1. 비순차 연관 컨테이너
  2. 해시 함수
  3. 해시 충돌, 해시 문제점

 

#0. 비순차 연관 컨테이너

 

  • C++의 STL(표준 라이브러리)의 비순차 연관 컨테이너는 해시 함수를 사용합니다.
  • 비순차 연관 컨테이너에는 "unordered_map", "unordered_multimap", "unordered_set", 그리고 "unordered_multiset"이 있습니다.
  • 이들은 모두 항목을 저장할 때, 정렬 작업을 수행하지 않습니다.

 

#1. 해시 함수

 

출저: 전문가를 위한 C

 

  • 해시 테이블을 구현하기 위해 "버킷(Bucket)"이라는 배열에 대한 배열을 사용합니다.
  • 해시 함수는 키를 이 버킷의 인덱스와 매핑합니다. 그리고 키와 쌍을 이루는 항목 값은 해당 인덱스 위치에 저장되죠. 

 

키 -> 해쉬 함수 -> 버킷 인덱스 -> 항목 값 저장

 

#2. 해시 충돌

 

  • 이때, 우리는 "해시 충돌"에 대해 알고 있어야합니다.
  • 해시 충돌이란 두 개 이상의 키에 대한 해시 함수의 결과 값이 같을 경우를 얘기합니다.
  • 즉, 버킷의 인덱스 번호가 같은 두 개 이상의 항목이 존재하는 것을 의미합니다.
  • 이 충돌 문제를 해결하기 위해 대부분의 구현에서 "리니어 체이닝"을 사용하고 있습니다.
  • 리니어 체이닝 방법에 따르면, 먼저, 해시 값의 결과로 나온 버킷의 인덱스는 연결 리스트를 포인팅 합니다.
  • 해당 연결 리스트는 저장하고자 하는 최초의 키 값과 데이터를 함께 저장합니다.
  • 따라서, 우리는 항목 값에 접근하기 위해 연결 리스트를 순회하며 우리가 찾고자 하는 키와 데이터가 합치하는 항목을 찾게 되죠.
  • 리니어 체이닝의 수행 과정은 아래와 같습니다. 

 

 키 -> 해시 함수 -> 버킷 인덱스 -> 연결 리스트 -> 키 + 항목 값

 

 

 

'언어 > Basic C++' 카테고리의 다른 글

[Basic C++] #42_unordered_multimap, 비순차 연관 컨테이너, 중복 허용  (0) 2022.06.28
[Basic C++] #41_unordered_map, 비순차 연관 컨테이너  (0) 2022.06.28
[Basic C++] #39_multimap, 연관 컨테이너, 중복 허용  (0) 2022.06.24
[Basic C++] #38_map, 연관 컨테이너  (0) 2022.06.23
[Basic C++] #37_pair  (0) 2022.06.22
  1.  
  2. [Basic C++] #40_해시 함수, 비순차 연관 컨테이너, 해시 테이블
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #42_unordered_multimap, 비순차 연관 컨테이너, 중복 허용
  • [Basic C++] #41_unordered_map, 비순차 연관 컨테이너
  • [Basic C++] #39_multimap, 연관 컨테이너, 중복 허용
  • [Basic C++] #38_map, 연관 컨테이너
Hardii2
Hardii2
개발 블로그Hardii2 님의 블로그입니다.
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 트리
  • set
  • unreal
  • 개발
  • 기술 질문
  • programmers
  • BFS
  • C++
  • 알고리즘
  • 우선순위 큐
  • dfs
  • Unreal Blueprint
  • BOJ
  • 최단 경로
  • DP
  • Effective C++
  • 정렬
  • 그래프
  • stl
  • 디자인 패턴

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #40_해시함수, 비순차 연관 컨테이너, 해시 테이블
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.