私は現在cを学んでいます。演習としてWebサーバーを作成しています。
ステータスコードと理由フレーズを保存する必要があります。
これらのキーと値のペアを保存するための最良の方法は何ですか?
私の最初の賭けはハッシュマップでした。しかし、cにはネイティブの実装はありません。だから私はライブラリを使わなければならないでしょう。
他の回答と同様に、文字列の配列をルックアップテーブルとして使用することもお勧めします。すべてのステータスコードが一意であると想定する場合、文字列の配列は、より小さなデータセットの実装としてははるかに簡単です。
大量のデータの保存を開始すると、ハッシュマップが有用になり始めます。ここでの解決策はルックアップ配列ですが、Cを学習しているとおっしゃったように、動的メモリ(Cで学習するための重要な概念)を使用して、ネイティブCで実際にハッシュテーブルを実装できます。このWebサイトでは、でハッシュテーブルを作成する方法について説明しています。 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";