C++ hash模板

#include  
#include 
#include 
#include 
using namespace std;
class Customer {
public:
	std::string fname, lname;
	double sour;
	
	Customer(std::string fn, string ln, double s)
		:fname(fn), lname(ln), sour(s)
	{}
};
//用来计算Hash 
template 
inline void hash_combine(std::size_t& seed,const Type& val) {
	seed ^= hash()(val) +
		0x9e3779b9 +
		(seed << 6) +
		(seed >> 2);
}
template 
inline void hash_val(std::size_t& seed, const Type& val) {
	hash_combine(seed, val);
}
template 
inline void hash_val(std::size_t& seed, const t1& val, Type& ... args) {
	hash_combine(seed, val);
	hash_val(seed, args...);
}
template 
inline size_t hash_val(const Type& ... args) {
	std::size_t seed = 0;
	hash_val(seed, args...);
	return seed;
}
struct Hash_ {
public:
	std::size_t operator()(const Customer& val)const {
		return 	hash_val(val.fname, val.lname, val.sour);
	}
};
int main() {
	const Customer pp("111","2222,",52.0);
	cout << Hash_()(pp) << endl;
	const Customer pp1("111", "asdfasdfasdfas,", 52.0);
	cout << Hash_()(pp1) << endl;
	const Customer pp2("adsfasdfa", "2222,", 52.0);
	cout << Hash_()(pp2) << endl;
	return 0;
}

 

你可能感兴趣的:(c++)