static_maps: consteval std::map and std::unordered_map Implementations in C++23
Isaac D. Myhal, Oliver Serang

TL;DR
This paper introduces static_maps, a C++23 library that uses consteval to create highly efficient compile-time maps, outperforming existing solutions in speed for various lookup tasks.
Contribution
The paper presents the first implementation of compile-time std::map and std::unordered_map in C++23 using consteval, achieving superior performance over existing methods.
Findings
Unordered_map runtimes are less than 40% of std::unordered_map in tests.
Library runtimes are significantly faster than Frozen, PTHash, and gperf.
Achieves the fastest drop-in alternative to std::unordered_map.
Abstract
Using consteval from C++23, we implement efficient, new versions of std::map and std::unordered_map for use when the keys are known at compile time. We demonstrate superior performance of our unordered_map on three demonstration use-cases: Lookup of elemental mass from atomic symbol, lookup of amino acid from codon, and modification of stock prices from S&P 500 ticker symbols all produced runtimes <40%, <35%, <73% of the respective runtimes of the std implementations. Our library runimes were <80%, <45%, <97% of the lookup time of Frozen, an alternative perfect hashing implementation in C++ for problems also using constexpr keys. To our knowledge, this makes our library the overall fastest drop-in (i.e., with a similar API) alternative to std::unordered_map. On one arbitrarily chosen demo, we demonstrate runtimes <35% of PTHash and <89% gperf, state-of-the-art but not drop-in hashing…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsParallel Computing and Optimization Techniques · Algorithms and Data Compression · Security and Verification in Computing
