Skip to content

Instantly share code, notes, and snippets.

@Lee-R
Created October 5, 2012 13:27
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save Lee-R/3839813 to your computer and use it in GitHub Desktop.
Save Lee-R/3839813 to your computer and use it in GitHub Desktop.
C++11 compile-time hash of literal strings.
#include <cstdint>
namespace detail
{
// FNV-1a 32bit hashing algorithm.
constexpr std::uint32_t fnv1a_32(char const* s, std::size_t count)
{
return ((count ? fnv1a_32(s, count - 1) : 2166136261u) ^ s[count]) * 16777619u;
}
} // namespace detail
constexpr std::uint32_t operator"" _hash(char const* s, std::size_t count)
{
return detail::fnv1a_32(s, count);
}
constexpr std::uint32_t check = "0123456789ABCDEF"_hash;
int main()
{
// Compare against precomputed value.
static_assert(check == 141695047u, "bad hash value");
return 0;
}
@ArashPartow
Copy link

A comprehensive list of general purpose hash functions and their implementations can found here:

https://www.partow.net/programming/hashfunctions/index.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment