-
emhash
는C++
용 고성능 헤더 전용 해시맵/해시셋 라이브러리입니다.- 프로젝트 홈페이지: https://github.com/ktprime/emhash
-
std::unordered_map
보다 빠르고 메모리 효율적인 대안을 제공하며, 다양한 최적화 구현체가 포함되어 있어 성능 및 용도에 따라 선택할 수 있습니다. -
주요 특징:
- 헤더 전용 (
header-only
) - 고속 삽입/탐색/삭제
- 낮은 메모리 사용량
- 높은 부하 계수 (
load factor
) 지원 - 다양한 환경(
Windows
/Linux
/Mac
,GCC
/Clang
/MSVC
)에서의 호환성
- 헤더 전용 (
insert_unique
: 중복 확인 없이 삽입shrink_to_fit
: 사용하지 않는 버킷 제거로 메모리 절약reserve
: 초기 해시맵 크기 설정으로 리사이징 최소화- 다양한 버전(
emhash1
~emhash8
)의 해시맵 구현 제공
-
아래는
emhash8::HashMap
을 사용하는 간단한 예제입니다: -
cpp
// 헤더 파일 포함 #include "emhash8.h" // 또는 "emhash7.h" 등 다른 버전 사용 가능 #include <iostream> int main() { emhash8::HashMap<int, std::string> map; // 값 삽입 map[1] = "apple"; map[2] = "banana"; map[3] = "cherry"; // 값 접근 std::cout << "map[2] = " << map[2] << std::endl; // 반복문을 통한 전체 출력 for (const auto& kv : map) { std::cout << kv.first << ": " << kv.second << std::endl; } // 요소 존재 확인 if (map.find(3) != map.end()) { std::cout << "키 3은 존재합니다." << std::endl; } // 요소 삭제 map.erase(1); // 전체 요소 수 출력 std::cout << "남은 요소 수: " << map.size() << std::endl; return 0; }
-
외부 벤치마크에 따르면
emhash
는Google
의dense_hash_map
,absl::flat_hash_map
,robin_hood::unordered_flat_map
등과 비교해 삽입/탐색/삭제 성능에서 우수한 결과 를 보였습니다. -
특히 반복(
iteration
) 속도와 부하 계수(load factor
) 면에서 탁월한 성능을 자랑합니다. -
참고: 공식 벤치마크 결과
- (1)
emhash
GitHub
저장소에서 소스 다운로드 - (2) 원하는 구현 버전의 헤더 파일 포함
- 예:
#include "emhash8.h"
- 예:
- (3) 컴파일 시 최적화 플래그를 적용하면 성능이 향상됨
-O2
,-O3
,-march=native
등
emhash
는 고성능을 요구하는C++
애플리케이션에서std::unordered_map
의 대체재로 고려할 수 있습니다.- 헤더 전용이므로 프로젝트에 쉽게 통합할 수 있으며, 다양한 환경에서 안정적인 작동을 보장합니다.
- 필요에 따라
emhash1
부터emhash8
까지 구현체를 시험해보며 가장 적합한 성능 조합을 선택해보시길 권장드립니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
'C C++' 카테고리의 다른 글
GitHub CLI (gh) 설치 가이드 (0) | 2025.04.01 |
---|---|
C++ 버전 별 템플릿 타입 유추(Deduction Guide) 기능 구현 비교 (0) | 2025.03.30 |
C++20 컴파일 타임 함수 : consteval과 constinit (0) | 2025.03.30 |
C++ SFINAE(Substitution Failure Is Not An Error) : 템플릿 조건부 제어를 위한 핵심 기법 (0) | 2025.03.29 |
C++ 뷰(View) 타입과 소유(Ownership) 타입 (0) | 2025.03.29 |