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

用户名

我正在使用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)来支持两个哈希函数?如果我完全弄错了,请引导我走正确的路。谢谢。

特里斯坦·布林德尔

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

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

但是,您可能会发现使myHashFunction静态成员函数更好,除非它实际上在您的内部使用其他成员或数据HashMap(我想可能不应该这样)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用std :: function或Boost在C ++中实现类成员指针?

C ++:如何使由std :: function索引的容器?

std :: is_function如何实现?

如何在 C++ 中访问 std::list 中的 std::function

libcxx中std :: is_function的强制实现如何工作?

C ++从std :: vector <std :: function <... >>删除std :: function

C ++ 17无法使用std :: bind生成std :: function

如何在 C++ 中实现 function(f)(x)(y, z)(g)(r)?

如何在C ++中重写Function

如何在C ++中唯一标识包含在std :: function中的lambda(可能正在捕获)

如何正确检查std :: function在C ++ 11中是否为空?

C ++如何在不同返回类型的重载运算符上使用std :: function

如何在C ++中使用std :: function访问Functor的成员函数?

如何仅使用C ++ 14实现std :: from_chars()

C ++:将std :: function转换为gsl_function

在C ++ 17中具有noexcept的std :: function

std :: function在c ++中接受不同的函数签名

将 std::function 绑定到 C++ 中的成员函数?

从C ++中的std :: function访问模板化的lambda

使用object中的方法使用std :: bind和std :: function.target调用C样式的函数地址

使用C ++ 20概念来避免std :: function

使用 std::function 存储继承类的方法 c++

C ++ std :: function运算符=

C ++ std :: function type cheking正确吗?

C ++ 11 std :: function const重载歧义

c++ std::function 回调

我可以从C调用std :: function吗?

C ++ std :: function-like模板语法

C++ std::function 导致段错误