Возможна ли инициализация map на этапе компиляции?
Могу ли я, скажем, создать в классе константный статический map и проинициализировать его необходимыми знаечниями на этапе компиляции? Если это возможно, то как?
Ответы (1 шт):
На всякий случай - если именно проинициалзировать во время компиляции, т.е. чтобы вся структура еще до работы программы уже находилась в памяти со всей настроенной внутренней структурой etc etc, то нет.
Но если тут терминологическая путаница, и вы просто хотите указать при компиляции, какие значения в нем должны быть при выполнении программы, т.е. чтоб их внес конструктор - тогда да.
struct Test
{
static const map<int,int> m;
};
const map<int,int> Test::m = {{1,2},{4,18},{2,15}};
int main()
{
for(auto [a,b]: Test::m) cout << a << " " << b << endl;
}
Вы хотите чего-то такого?
С точки зрения пользователя/программиста, если вы не вносите таким образом миллионы значений - то разницы, внесли вы их при компиляции или при первом обращении, по большому счету нет - какие-то микросекунды.