一个万用哈希函数(Hash Function)的写法whit C++

用C++写的一个万用哈希函数模板

template <typename T>
inline void hash_combine(size_t& seed, const T& val)
{
    seed ^= hash<T>()(val) +
        0x9e3779b9 +
        (seed << 6) +
        (seed << 2);
}

template <typename T, typename... Types>
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);
}

template <typename... Types>
inline void hash_val(const Types&... args)
{
    size_t seed = 0;
    hash_val(seed, args);
    return seed;
}

应用举例

假设你有一个学生类Customer,其包含first name , last name以及学号,现在利用上面的万能哈希函数求得其哈希值,以决定该类实例放置于hashset中的位置。你就可以像下面这样调用它:

class CustomerHash{
public:
    std::size_t operator()(const Customer& c)const{
        return hash_val(c.fname, c.lname, c.no);
    }
}

你可能感兴趣的:(哈希算法,c++,万用哈希函数)