2017-05-10 4 views
-3

私はPython/Javaの土地から来て、私は自分のハッシュマップをC++で作ろうとしています。ベクトルオブジェクトをNULLと比較できますか?

私は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>(); 
} 
+3

コンパイラは、エラーであることを通知します。 'hasArray'の宣言を表示すると、誰かが解決策を提供できるかもしれません。 –

+0

'hashArray.count(temp)' – Justin

+0

@JustinAndréは演習として自分のハッシュマップを作成しています。 'hashArray'はその型であり、標準のハッシュマップではないと仮定するのは妥当です。したがって、 'count'メソッドがあると仮定することはできません。 –

答えて

0

hashArray is a vector<HashEntry> Object

hashArray[temp]HashEntryに評価されます。 HashEntryNULLを比較することはできません。

hasArrayにキーがtempに等しいアイテムがあるかどうかを確認するには、別の方法を使用します。 std::count_ifを使用することをおすすめします。

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; 
} 

@cdhowieが示唆しているように、より良い解決法はstd::any_ofです。

while (i < size && std::any_of(hashArray.begin(), hashArray.end(), 
           [=temp](HashEntry const& e) 
           { return (temp == e.getKey());})) 
{ 
    i++; 
    temp = (hashVal + i*hash_Two(k)) % size; 
} 
+0

条件が '> 0 'なので、' std :: any_of'は 'std :: count_if'よりもお勧めします。 – cdhowie

+0

@cdhowie、ありがとう。それはより良い解決策です。 –

関連する問題