gpt4 book ai didi

c++ - 在 C++ 中实现 HashMap 时如何使用 std::function

转载 作者:行者123 更新时间:2023-11-28 07:18:11 25 4
gpt4 key购买 nike

我正在 HashMap 类声明中使用 typedef std::function 处理 HashMap 类。

typedef std::function<unsigned int(const std::string&)> HashFunction;

对于类的私有(private)成员,我有 HashFunction 哈希,它可以与我自己的哈希函数一起使用,也可以使用提供给构造函数的其他函数。

HashFunction hash;
unsigned int myHashFunction(const std::string&) const;

默认构造函数必须将散列设置为默认值,在我的例子中是 myHashFunction。一个以 HashFunction 作为参数的构造函数必须使用该特定函数,而不是 myHashFunction。

HashMap::HashMap()
: map(new Node*[INITIAL_BUCKET_COUNT]), mapSize(0), mapCapacity(INITIAL_BUCKET_COUNT),
hash(std::bind(&HashMap::myHashFunction, this)) // This is definitely not correct
{
initializeMap();
}

HashMap::HashMap(HashFunction hashFunction)
: map(new Node*[INITIAL_BUCKET_COUNT]), mapSize(0), mapCapacity(INITIAL_BUCKET_COUNT),
hash(hashFunction) //Is this correct?
{
initializeMap();
}

如何将 myHashFunction 或提供的散列函数绑定(bind)到散列,以便我可以在类成员函数中使用 hash(key) 来支持这两个散列函数?如果我完全弄错了,请指引我走上正确的道路。谢谢。

最佳答案

对于 std::bind 行,如果您尝试绑定(bind)一个成员函数,那么您需要包含一个占位符,如下所示:

std::bind(&HashMap::myHashFunction, this, std::placeholders::_1);

不过,您可能会发现将 myHashFunction 设为静态成员函数会更好,除非它实际上使用了您的 HashMap 中的其他成员或数据(我猜它可能不应该t).

关于c++ - 在 C++ 中实现 HashMap 时如何使用 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898218/

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