私は*
がポインタを定義していることを知っています... **
はポインタへのポインタを定義しますか?この単純なハッシュ実装で**は何をしていますか?
もしそうなら、なぜですか?
ポインターへのポインターは参照と呼ばれることがありますか?次の非常に単純なハッシュの明確化が必要です。
一般的には、内容全体を渡すにはコストがかかりすぎるため、より大きな構造の場所を渡すためにポインタが使用されます。
私は、各「オブザーバー」が実行時に変更される「用語構造」ポインターへのポインターを保持するので、「ハンドル」を作成するためにquantlibプロジェクトで使用されるポインターを見てきました。別のポインタの。
ここでは相関関係はありませんか?
class hash_entry
{
private:
int key;
int value;
public:
hash_entry(int key, int value)
{
this->key = key;
this->value = value;
}
int getKey()
{
return key;
}
int getValue()
{
return value;
}
};
class hash_map
{
private:
hash_entry **table;
static const int TABLE_SIZE = 128;
public:
hash_map()
{
table = new hash_entry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
int get(int key)
{
int hash = (key % TABLE_SIZE);
while (table[hash] != NULL && table[hash]->getKey() != key)
hash = (hash + 1) % TABLE_SIZE;
if (table[hash] == NULL)
return -1;
else
return table[hash]->getValue();
}
void put(int key, int value)
{
int hash = (key % TABLE_SIZE);
while (table[hash] != NULL && table[hash]->getKey() != key)
hash = (hash + 1) % TABLE_SIZE;
if (table[hash] != NULL)
delete table[hash];
table[hash] = new hash_entry(key, value);
}
~hash_map()
{
for (int i = 0; i < TABLE_SIZE; i++)
if (table[i] != NULL)
delete table[i];
delete[] table;
}
};
宣言することができました。あなたはどこでこれにつまずいたのですか? – Nate
これは私が見つけることができる最も簡単なハッシュです。ちょうど値のセットを再配分するために%を使用します... algolist.net次のステップは、配列要素からリンクリストを追加することです。 – user1001776
これはあなたがコントロールしていないコードであるかどうかはわかりませんでした。私は間違いなく、このトピックの@ JerryCoffinからの提案に従い、あなたが投稿したものを正確に使用しません。 – Nate