私はCでHashMapを作成していますが、すべてのHashMapsに標準であるValues()関数を作成しようとしています。C - HashMap Values()関数 - NULL値を返しますか?
のは、私のHashMapのは、次のように見えたとしましょう:
(キーセットはタイプ<void*, void*>
であることに注意してください)
// CAPACITY = 8, SIZE = 4
[0] <"Pancakes", 24>
[1] = NULL
[2] = <"Waffles", 7>
[3] = NULL
[4] = NULL
[5] = NULL
[6] = <"Eggs", 12>
[7] = <"Bacon", 99>
通常、このsitatuionで、私は配列を作成しますsize_t
5
であり、次のようになります。
{ 24, 7, 12, 99, NULL }
NULLはここになければなりません。そうでなければ、配列を返すと、ループを終了しようとするループはいつ停止するかを知ることができません。
もし私が次のことをしていたらどうしますか?
// CAPACITY = 8, SIZE = 4
[0] <"Pancakes", 24>
[1] = NULL
[2] = <"Waffles", NULL>
[3] = NULL
[4] = NULL
[5] = NULL
[6] = <"Eggs", 12>
[7] = <"Bacon", 99>
突然、私の配列は、以下のようになります。
{ 24, NULL, 12, 99, NULL }
そして、それが返された後、私はそれをプリントアウトしようとするとき、それは次のように印刷します:
24
この問題はどのように処理すればよいですか?私はちょうどNULL
の値を無視すべきですか?その場合、私のHashMap
はsize
が4であり、プログラマはValues()
の機能から4
の値を期待していますが、彼にはサイズ3
の配列しか与えません。そして、いや、私は本当にあなたが離れてstruct
を返すから、発信者に対して異なるサイズの配列を返すための複数のオプションを持っているバックなどsize
など複数の変数を渡すためANDアレイ
質問が不明です。 '<" Waffles "、NULL>'これは有効なCコードではないので、あなたがそこで表現しようとしているものが明確ではありません。 「NULL」は何を表していますか?そして、あなたが参照し続けるためにあると思われる配列は何ですか?あなたのHashMap実装の考え方が本当に明確ではありません。おそらく、[mcve]は物事を明らかにするでしょう。 – kaylum
これは、値を順番にリストしているという意味でハッシュマップのようには思えません。ハッシュマップは必ずしもそのようにはなりません。値がテーブル内の連続するスロットにあると想定することはできません。 – templatetypedef
私にはっきりさせてください。上記のコードは有効なCコードではありません。私は無関係のコードで物事を複雑にしたくなかった。代わりに私は理論的な問題を記述したかったのです。 <"Bacon", 99>は2つの 'void *'フィールドを持つ 'struct Node'です。つまり、私の 'key'または' value'は 'HashMap'では受け入れられる' HashTable'ではなく 'NULL'になります。うまくいけば、それはすべての懸念をクリアする。 – Hatefiend