有关C++哈希函数的常用形式,具体解释见注释

发布时间 2023-08-17 16:47:49作者: Mexcellent
#pragma once
#include<unordered_set>
#include<unordered_map>
namespace hash_function {
	//将参数传入
	template<typename... Types>
	inline size_t hash_val(const Types&...args) {
		size_t seed = 0;
		hash_val(seed, args...);
		return seed;
	}
	//将参数进行分解
	template<typename T, typename... Types>
	inline void hash_val(size_t& seed, const T& val, const  const Types&...args) {
		hash_combine(seed, val);
		hash_val(seed, args...);
		return seed;
	}
	//函数递归的出口,即参数最终分解为一个
	template<typename T>
	inline void hash_val(size_t& seed, const T& val) {
		hash_combine(seed, val);
	}
	//计算对应的哈希码
	template<typename T>
	inline void hash_combine(size_t& seed, const T& val) {
		seed ^= std::hash<T>(val) + 0x9e3779b9 + (seed << 9) + (seed >> 2);
	}
}