当我尝试从以下代码行调用create hash函数时,我收到错误没有匹配的函数用于调用
myHash.create("5", "Data");
checkTest("testSimpleIntHash #1", "Data", myHash.retrieve("5"));
想法是create从KeyValuePair类接收密钥,然后该方法将散列密钥,转到该桶,然后插入密钥值对。我相信我收到此错误,因为我没有输出到字符串。但是,我无法弄清楚使用create方法将键值对正确输出到字符串的语法。 (我正在使用std::list
,我的KeyValuePair
班级正常运作)
template<typename T> class HashTable
{
public:
static const unsigned int NUM_BUCKETS = 100000;
HashTable create(const string& key, const T& item)
{
int temp = hash(key);
arr[NUM_BUCKETS].push_back(KeyValuePair<T>(temp, item));
}
private:
int hash(const string& key) const;
//Make an array of linked lists of KeyValuePair objects.
list<KeyValuePair<T>> arr[NUM_BUCKETS];
};
template <typename T>
int HashTable<T>::hash(const string& key) const {
int temp = 0;
for (int i = key.length(); i >= 0; i--) {
temp = (13 * temp + key[i]) % NUM_BUCKETS;
}
return temp;
}
答案 0 :(得分:0)
在create
方法中,您可以返回对类本身的引用。
HashTable& create(const string& key, const T& item)
{
int temp = hash(key);
arr[NUM_BUCKETS].push_back(KeyValuePair<T>(temp, item));
return *this;
}
但无论如何,你不是它的使用者。
您需要在班级retrieve
中声明HashTable
方法:
例如:
string retrieve(const string& input)
{
string result;
//Not sure wath do you pretend to be this method.
//But it will transform your input in your result
return result;
}