C ++では、次のことができます。
static const char * [4] = {
"One fish",
"Two fish",
"Red fish",
"Blue fish"
};
...これにより、実行時に初期化するのにCPUサイクルを必要としない、優れた読み取り専用配列データ構造が得られます。これは、すべてのデータが(実行可能ファイルの読み取り専用メモリページに)配置されているためです。コンパイラ。
しかし、配列の代わりに別のデータ構造を使用したい場合はどうなりますか?たとえば、データ構造でキーを介して高速ルックアップを実行したい場合は、次のようにする必要があります。
static std::map<int, const char *> map;
int main(int, char **)
{
map.insert(555, "One fish");
map.insert(666, "Two fish");
map.insert(451, "Red fish");
map.insert(626, "Blue fish");
[... rest of program here...]
}
...コンパイル時に必要なすべてのデータがわかっていたため、その作業は(理論的には)実行できたとしても、実行時にマップデータ構造にデータが入力されるため、エレガントで効率が低下します。
私の質問は、C ++(またはC ++ 11)で、読み取り専用のデータ構造(マップなど)を作成する方法はありますか?そのデータはコンパイル時に完全にセットアップされ、事前に入力され、で使用できるようになります。実行時、配列のあり方は?