728x90
반응형

고성능 C++ 해시맵(HashMap) 라이브러리 : emhash


1. ✅ 개요

  • emhashC++용 고성능 헤더 전용 해시맵/해시셋 라이브러리입니다.

  • std::unordered_map 보다 빠르고 메모리 효율적인 대안을 제공하며, 다양한 최적화 구현체가 포함되어 있어 성능 및 용도에 따라 선택할 수 있습니다.

  • 주요 특징:

    • 헤더 전용 (header-only)
    • 고속 삽입/탐색/삭제
    • 낮은 메모리 사용량
    • 높은 부하 계수 (load factor) 지원
    • 다양한 환경(Windows/Linux/Mac, GCC/Clang/MSVC)에서의 호환성


2. 🚀 대표 기능

  • insert_unique: 중복 확인 없이 삽입
  • shrink_to_fit: 사용하지 않는 버킷 제거로 메모리 절약
  • reserve: 초기 해시맵 크기 설정으로 리사이징 최소화
  • 다양한 버전(emhash1~emhash8)의 해시맵 구현 제공


3. 🧪 예제 코드

  • 아래는 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;
      }
    


4. 📊 성능

  • 외부 벤치마크에 따르면 emhashGoogledense_hash_map, absl::flat_hash_map, robin_hood::unordered_flat_map 등과 비교해 삽입/탐색/삭제 성능에서 우수한 결과 를 보였습니다.

  • 특히 반복(iteration) 속도와 부하 계수(load factor) 면에서 탁월한 성능을 자랑합니다.

  • 참고: 공식 벤치마크 결과



5. 🧩 설치 및 사용

  • (1) emhash GitHub 저장소에서 소스 다운로드
  • (2) 원하는 구현 버전의 헤더 파일 포함
    • 예: #include "emhash8.h"
  • (3) 컴파일 시 최적화 플래그를 적용하면 성능이 향상됨
    • -O2, -O3, -march=native


6. ✅ 정리

  • emhash는 고성능을 요구하는 C++ 애플리케이션에서 std::unordered_map의 대체재로 고려할 수 있습니다.
  • 헤더 전용이므로 프로젝트에 쉽게 통합할 수 있으며, 다양한 환경에서 안정적인 작동을 보장합니다.
  • 필요에 따라 emhash1부터 emhash8까지 구현체를 시험해보며 가장 적합한 성능 조합을 선택해보시길 권장드립니다.



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

+ Recent posts