hopscotch-map: una biblioteca C++ de tablas hash rápidas mediante hopscotch hashing

Fuentes: hopscotch-map: a fast C++ hash map and hash set using hopscotch hashing

hopscotch-map es una biblioteca de C++ únicamente de cabeceras (header-only) que implementa mapas y conjuntos hash de alto rendimiento basados en direccionamiento abierto y la técnica de hopscotch hashing para resolver colisiones. Su estructura, amigable con la caché, ofrece en la mayoría de los casos mejores prestaciones que std::unordered_map y se compara con google::dense_hash_map, pero con menor consumo de memoria y más funcionalidades.

La biblioteca ofrece cuatro clases principales: tsl::hopscotch_map y tsl::hopscotch_set (más rápidas, con política de crecimiento en potencia de dos) y tsl::hopscotch_pg_map y tsl::hopscotch_pg_set (con política de crecimiento en números primos, más robustas frente a funciones hash deficientes). Incluye además las variantes bhopscotch, que exigen claves comparables y ofrecen un coste logarítmico en el peor caso para búsquedas y borrados, lo que las hace resistentes a ataques DoS.

Entre sus características destacan el soporte para claves y valores move-only y no construibles por defecto, las búsquedas heterogéneas (find acepta tipos distintos de Key sin construir el objeto), la posibilidad de almacenar el valor hash internamente para acelerar rehash y lookups, y la compatibilidad con proyectos compilados sin excepciones (-fno-exceptions, TSL_NO_EXCEPTIONS). Su API es prácticamente idéntica a la de std::unordered_map y std::unordered_set, con tres políticas de crecimiento intercambiables (potencia de dos, primo y modular personalizable).

La librería se distribuye como una sola carpeta include y se integra fácilmente mediante CMake. El repositorio incluye comparativas de rendimiento y orientaciones para elegir la estructura de tabla hash más adecuada según el caso de uso.