キーと可変サイズ配列の間の静的な関連付けを保存したいと思います。
"foo" => ["bar", "awe"]
"foo2" => ["bar2", "awe2", "gruh"]
この配列は、プログラムの実行中に変更されることはありません。これは、文字列の可変配列を文字列キーに静的に関連付ける方法にすぎません。
サブアレイの数は非常に少ない(<100)。
どうすれば純粋なCでそれを行うことができますか?
わかりました、これが誰かが私にくれた解決策です:
struct
{
const char *key;
const char **values;
} key_to_values[] =
{
{ .key = "foo", .values = (const char *[]) { "val1", "val2", NULL } },
{ .key = "bar", .values = (const char *[]) { "val3", "val4", "val5", NULL } },
};
あなたはハッシュテーブルでそれを行うことができます。
例えば:
#include <stdint.h>
#include <string.h>
uintmax_t hash(const char *s) { /* ... */ }
static const char t[N][M];
void init_string(void)
{
strcpy(t[hash("foo")][0], "bar");
strcpy(t[hash("foo")][1], "awe");
/* etc */
}
char *get_string(const char *s)
{
return t[hash(s)];
}
行うには:
N
とM
; hash
関数を定義します。あなたの意図を正しく理解していれば、配列を文字列キーに関連付けたいと考えています。コア c の組み込み構造を使用してこれを行うことはできないと思います。つまり、c 配列は整数によってのみインデックス付けされます。
ハッシュ テーブルはいつでも作成できますが、文字列からインデックスへのマッピングはプログラマ自身が行う必要があります。
C++ ではマップを使用してこれを実現できますが、マップは STL の一部です。