私は現在cを学んでいます。演習として Web サーバーを作成しています。
ここで、ステータス コードと理由フレーズを保存する必要があります。
これらのキーと値のペアを保存する最良の方法は何ですか?
私の最初の賭けはハッシュマップでした。しかし、c にはネイティブ実装はありません。したがって、ライブラリを使用する必要があります。
他の回答と同様に、文字列の配列をルックアップ テーブルとして使用することもお勧めします。すべてのステータス コードが一意であると仮定すると、文字列の配列は、小さなデータ セットの最も簡単な実装です。
大量のデータを保存し始めると、ハッシュマップが有用になり始めます。ここではルックアップ配列が解決策ですが、C を学んでいるとおっしゃっていたように、実際には動的メモリを使用してネイティブ C でハッシュテーブルを実装できます (C を学ぶ上で重要な概念です)。 C とてもよく。
http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml
これは、メモリのオーバーヘッドがいくらかありますが、速度の利点がある別のアイデアです。
基本的に、ハッシュ関数が ID (コード -> コード) であるハッシュ テーブルの最も単純な形式で、ルックアップ テーブルとも呼ばれます。
これを行うには、HTTP ステータス コードが 5xx に制限されていることを知っているため、599 が必要な最高値であると想定できます。したがって、600 要素のテーブルを作成します。
このテーブルは次のように実行できます。
const char * status_messages[600];
初期化はとても簡単です:
/* initialize all with NULL's so invalid codes correspond to NULL pointers */
memset(status_messages, (int)NULL, 600 * sizeof(const char *));
/* ... */
status_messages[403] = "Forbidden";
status_messages[404] = "Not found";
/* ... */
メッセージの検索も非常に簡単です。
int code = 403;
const char * message = status_messages[code];
この配列は 2400 バイト (64 ビット プラットフォームでは 4800 バイト) の大きさになりますが、アクセス時間は O(1) であることが保証されています。
たぶん、K\Vを含む構造体を作成できます。
そのようです:
struct key_value
{
int key;
char* value;
};
struct key_value kv;
kv.key = 1;
kv.value = "foo";