피드로 돌아가기
Hacker NewsHacker News
Database

Hopscotch Hashing 기반 최적화로 std::unordered_map 성능 초과 달성

A C++ implementation of a fast hash map and hash set using hopscotch hashing

2026년 6월 26일13advanced

Context

std::unordered_map의 낮은 Cache-locality와 메모리 효율 저하 문제 해결 필요. 기존 Open-addressing 방식의 충돌 해결 한계를 극복하고 빠른 Lookup 속도를 보장하는 고성능 Hash Map 설계 요구.

Technical Solution

  • Hopscotch Hashing 도입을 통한 Cache-friendly 데이터 구조 설계 및 충돌 해결 효율 극대화
  • Power-of-two Growth Policy 적용으로 Modulo 연산을 Bitwise AND 연산으로 대체하여 연산 속도 향상
  • Prime Growth Policy 제공을 통한 낮은 비트 패턴 반복 해시 함수의 충돌 가능성 억제
  • StoreHash 옵션을 통한 고비용 해시 함수 계산 결과 저장으로 Rehash 및 Lookup 비용 절감
  • Heterogeneous Lookups 지원으로 Key 타입 변환 없는 효율적인 검색 프로세스 구현
  • Binary Search Tree를 결합한 bhopscotch 구조 설계로 Hash DoS 공격 시 Worst-case O(log n) 보장

1. 해시 함수 연산 비용이 높을 경우 StoreHash 옵션 적용 검토

2. 포인터 기반 Key 사용 시 Lower-bit 충돌 방지를 위해 Prime Growth Policy 채택

3. 외부 입력값으로 인한 Hash DoS 공격 위험이 있는 시스템은 O(log n) 보장 구조(bhopscotch) 도입

4. 성능 극대화가 필요한 루프 내에서는 precalculated_hash 파라미터 활용

원문 읽기