Заполнение во время компиляции структур данных, кроме массивов?

В C ++ вы можете сделать это:

static const char * [4] = {
   "One fish",
   "Two fish",
   "Red fish",
   "Blue fish"
};

... и это дает вам хорошую структуру данных массива только для чтения, которая не требует циклов ЦП для инициализации во время выполнения, потому что все данные были размещены для вас (на страницах памяти только для чтения исполняемого файла) компилятор.

Но что, если я предпочел бы использовать другую структуру данных вместо массива? Например, если бы я хотел, чтобы моя структура данных имела быстрый поиск по ключу, мне пришлось бы сделать что-то вроде этого:

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) создать структуру данных только для чтения (например, карту), чьи данные полностью настраиваются во время компиляции и, таким образом, предварительно заполнены и готовы к использованию в во время выполнения, каким может быть массив?

Ответы на вопрос(4)

Ваш ответ на вопрос