完全に一般的な方法で成長するハッシュテーブルを実装したいと正確に推測する場合は、多くのvoid
ポインタが必要です。ベクトルはあまりにも難しいことではありません、それだけでタイピングがかかる:
typedef struct {
size_t capacity, nelems;
void **contents;
} Vector;
enum { INITIAL_CAPACITY = 256 };
Vector *make_vector()
{
Vector *v = malloc(sizeof(Vector));
if (v == NULL)
return NULL;
v->capacity = INITIAL_CAPACITY;
v->contents = malloc(sizeof(void *) * v->capacity);
if (v->contents == NULL) {
free(v);
return NULL;
}
v->nelems = 0;
return v;
}
// exercise for the reader
int vector_append(Vector *, void *);
void *vector_at(Vector const *);
あなたのサイズを渡す必要があり、すなわち、一般的なハッシュ関数はプロトタイプsize_t hash(void const *, size_t)
を持っているということを覚えておいてください。
(注:見逃しがちなC++のOOPの機能ではなく、テンプレート、購入するタイプの安全性、演算子のオーバーロードなどの構文上の砂糖です。詳細はOpenBSDのohash
ライブラリをご覧ください。 )