0

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

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

对于类的私有成员,我有 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 或提供的散列函数绑定到散列,以便我可以在类成员函数中使用 hash(key) 来支持这两个散列函数?如果我完全弄错了,请引导我走向正确的道路。谢谢。

4

2 回答 2

1

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

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

不过,您可能会发现创建一个静态成员函数会更好myHashFunction,除非它实际上使用了您的其他成员或数据HashMap(我猜它可能不应该)。

于 2013-11-11T03:14:10.773 回答
0

你为什么不使用std::hash?它在<functional>标题中定义。

于 2013-11-11T03:17:36.730 回答