В С++ вы можете сделать это:
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...]
}
... который менее элегантен и менее эффективен, так как структура данных карты заполняется во время выполнения, хотя все данные были известны во время компиляции, и поэтому эта работа могла бы (теоретически) быть выполнена.
Мой вопрос: есть ли способ в С++ (или С++ 11) создать структуру данных только для чтения (например, карту), данные которой полностью настроены во время компиляции и, таким образом, предварительно заполнены и готовы использовать во время выполнения, как может быть массив?