gpt4 book ai didi

c++ - 如何为各种模板类型构建哈希函数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:10 26 4
gpt4 key购买 nike

我正在练习使用 template 构建一个可以接受不同类型的哈希表。

如何在编译时不知道类型的情况下实现 hashFunction

template<class K, class V>
class HashTable {
public:
vector<vector<Bucket<K, V> > > table;
...
size_t hashFunction(const K &k) {
//can't implement without knowing the runtime types
}
}

我猜我应该做类似的事情:

return hash<K>(k) % table.size();

更新:

感谢 R Sahu 的回答,现在我知道这是我不清楚的模板部分特化部分。参见 this问题和this link供引用。

最佳答案

How do I implement hashFunction not knowing the types at compile time?

您可以使用通用逻辑为所有类型生成哈希值。将构成 k 的字节视为字符串中的字符。

此外,让用户能够提供自己的哈希函数。

// Generic implementation
template <typename K> struct Hash
{
static size_t get(const K& k)
{
...
}
};

template<class K, class V, typename HashGenerator = Hash<K>>
class HashTable {
public:
vector<vector<Bucket<K, V> > > table;
...
size_t hashFunction(const K &k) {
HashGenerator::get(k);
}
}

struct Foo { ... };

// Specialize Hash for Foo.
template <> struct Hash<Foo>
{
static size_t get(const Foo& foo)
{
...
}
}

关于c++ - 如何为各种模板类型构建哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34563574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com