我来自Python / Java领域,我正试图修改现在用c ++制作我自己的hashmap。
当我尝试检查以将哈希表中的位置位置与NULL(第6行和第11行)进行比较时,我收到错误:
invalid operands to binary expression ('value_type' (aka 'HashEntry') and 'long')"
我希望有人可以引导我朝着我做错的方向以及如何解决它。
void CustomHash::insert(HashEntry entry) {
int k = entry.getKey();
int i = 0;
int hashVal = hash_One(k);
int temp = hashVal;
while (i < size && hashArray[temp] != NULL) {
i++;
temp = (hashVal + i*hash_Two(k)) % size;
}
if (hashArray[temp] == NULL) {
hashArray[temp] = entry;
}
else {
cout << "Failure" << endl;
}
}
编辑1:hashArray声明
CustomHash::CustomHash(int m) {
this->size = m;
this->hashArray = vector<HashEntry>();
}
答案 0 :(得分:0)
鉴于,
hashArray是
.empty()
对象
vector<HashEntry>
评估为hashArray[temp]
。您无法将HashEntry
与HashEntry
进行比较。
使用其他策略检查NULL
是否包含任何密钥等于hasArray
的项目。我建议使用std::count_if
。
temp
根据@cdhowie的建议,更好的解决方案是使用std::any_of
。
while (i < size && std::count_if(hashArray.begin(), hashArray.end(),
[=temp](HashEntry const& e)
{ return (temp == e.getKey());}) > 0 )
{
i++;
temp = (hashVal + i*hash_Two(k)) % size;
}