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

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

}

  

#pragma once#include<unordered_set>#include<unordered_map>namespace hash_function {//计算对应的哈希码template<typename T>inline void hash_combine(size_t& seed, const T& val) {seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2);}//函数递归的出口,即参数最终分解为一个template<typename T>inline void hash_val(size_t& seed, const T& val) {hash_combine(seed, val);}//将参数进行分解template<typename T, typename... Types>inline void hash_val(size_t& seed, const T& val,const Types&...args) {hash_combine(seed, val);hash_val(seed, args...);return seed;}//将参数传入template<typename... Types>inline size_t hash_val(const Types&...args) {size_t seed = 0;hash_val(seed, args...);return seed;}
}
posted @ 2023-08-17 16:45  Mexcellent  阅读(30)  评论(0)    收藏  举报