gpt4 book ai didi

c++ - 如何在 Hasher 中使用非静态成员函数?

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:37 25 4
gpt4 key购买 nike

我需要使用不同于默认的哈希器来建立一个哈希表,所以我这样写:

class foo {
public:
...
private:
struct myhasher {
size_t operator() (myclass bar) { return hash_calculation bar; }
}
static size_t hash_calculation (myclass bar) {
// do some calculation
}
hash_map<myclass, myhasher> myhashmap;
}

它有效。现在出于某种原因我必须编写一个非静态成员函数来替换 hash_calculation,比如说,它需要一个类的非静态成员作为参数。然后整个事情都失败了,因为我不能在嵌套结构中使用非静态方法。

这在某种程度上类似于另一个广泛讨论的问题:如何使用非静态函数进行比较或排序。参见示例: Using a non-static class member inside a comparison functionC++ std list sort with custom comparator that depends on an member variable for the object instance .他们都建立了一个仿函数而不是函数作为比较器。但是在我的例子中,这个技巧不起作用,因为我需要 hash_map 定义中的类名,而不是特定的结构对象。我应该怎么办?预先感谢您的帮助!

最佳答案

你不能。 hash_map 应该如何知道在调用 myhaser::hash_calculation 时应该使用哪个 myhasher 实例?

hash_map 不是标准 C++ 库的一部分,甚至在 C++11 中也不是,因此它是一个自定义类,您没有包含有关它如何工作的任何信息。如果有一种方法可以让它采用某种构造函数参数,它应该使用 myhasher,那么你很幸运。但这听起来不像。

此外,当您可能想要传递常量引用时,您正在使用按值传递。按值传递可能会非常缓慢且效率低下。

关于c++ - 如何在 Hasher 中使用非静态成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13074923/

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