Added std::hash for tuples, because why not.

This commit is contained in:
Patrick 2025-07-02 23:10:30 +02:00
parent bf53622b19
commit 40c0d888e6

View File

@ -6,6 +6,8 @@
#define MIJIN_UTIL_HASH_HPP_INCLUDED 1 #define MIJIN_UTIL_HASH_HPP_INCLUDED 1
#include <functional> #include <functional>
#include <tuple>
#include <utility>
namespace mijin namespace mijin
{ {
@ -16,4 +18,21 @@ inline void hashCombine(std::size_t& seed, const T& value, const THasher& hasher
} }
} }
template<typename... T>
struct std::hash<std::tuple<T...>>
{
std::size_t operator()(const std::tuple<T...>& tuple) const noexcept
{
return hashImpl(tuple, std::index_sequence_for<T...>());
}
template<std::size_t... indices>
std::size_t hashImpl(const std::tuple<T...>& tuple, std::index_sequence<indices...>) const noexcept
{
std::size_t result = 0;
(mijin::hashCombine(result, std::get<indices>(tuple)), ...);
return result;
}
};
#endif // MIJIN_UTIL_HASH_HPP_INCLUDED #endif // MIJIN_UTIL_HASH_HPP_INCLUDED