HashMap
/HashTable
の独自の実装を作成しました(これらは異なるとは限りませんが、この質問には関係ありません)。C - void型をハッシュしますか?
この実装では、非常に柔軟性がありたいと思います。私はアルゴリズムのコードを変更することなく、int、構造体、文字、文字列などをすべてキーまたは値として格納できるようにしたい。たとえば、Javaで私はちょうど行うことができます:
HashMap<Integer, MyPersonalClass>
それだけで動作します。 Cでは、void*
以外は直接の同等物がないことが分かります。私のHashMap/HashTable
、その後、私のhash()
方法は何とか正しくkey
を解析する必要を構成するノード(複数可)として
/* Node structure. */
struct hm_Node
{
void *key, *value;
struct hm_Node *next;
};
:私が持っている場合は問題があります。これまでのところ、私はchar*
のアルゴリズムだけを調べました。
// This may not be valid code, just using it as an example
unsigned int hash(void *ptr)
{
switch(typeof(ptr)) // I know ptr is of type void*
{
case char*: ... break;
case char: ... break;
case int: ... break;
}
}
:
のようなものはありますか?私は、X、Y、ZタイプのHashMapに対して全く異なる実装を避けるようにしようとしています。ありがとう。
Cにようこそ。魔法はありません。自分の筋肉を持ってきてください。 –
'void *'(例えば '(void *)&something'で) '非表示'のタイプを抽出することはできません。 – ForceBru
@KerrekSBだから....私は何をしますか?私は、複数の 'HashMaps'を持っていたいとしましょう。 1つの「キー」は「ダブル」で、もう1つは「ストリング」です。確かに私は 'HashMap.c'と' HashMap.h'を貼り付け、 'HashMapForDoubles.c'と' HashMapForDoubles.h'をコピーするつもりはありません – Hatefiend