População em tempo de compilação de estruturas de dados diferentes de matrizes?

Em C ++, você pode fazer isso:

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

... e isso lhe dá uma boa estrutura de dados de matriz somente leitura que não requer nenhum ciclo de CPU para inicializar em tempo de execução, porque todos os dados foram definidos para você (nas páginas de memória somente leitura do executável) por o compilador.

Mas e se eu preferir usar uma estrutura de dados diferente em vez de uma matriz? Por exemplo, se eu quisesse que minha estrutura de dados tivesse pesquisas rápidas por meio de uma chave, teria que fazer algo assim:

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...]
}

... que é menos elegante e menos eficiente à medida que a estrutura de dados do mapa é preenchida em tempo de execução, embora todos os dados necessários sejam conhecidos em tempo de compilação e, portanto, esse trabalho poderia ter sido feito (teoricamente).

Minha pergunta é, existe alguma maneira em C ++ (ou C + + 11) para criar uma estrutura de dados somente leitura (como um mapa) cujos dados são totalmente configurados em tempo de compilação e, portanto, pré-preenchidos e prontos para uso em tempo de execução, a maneira como uma matriz pode ser?

questionAnswers(4)

yourAnswerToTheQuestion