Возможна ли инициализация map на этапе компиляции?

Могу ли я, скажем, создать в классе константный статический map и проинициализировать его необходимыми знаечниями на этапе компиляции? Если это возможно, то как?


Ответы (1 шт):

Автор решения: Harry

На всякий случай - если именно проинициалзировать во время компиляции, т.е. чтобы вся структура еще до работы программы уже находилась в памяти со всей настроенной внутренней структурой 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;
}

Вы хотите чего-то такого?

С точки зрения пользователя/программиста, если вы не вносите таким образом миллионы значений - то разницы, внесли вы их при компиляции или при первом обращении, по большому счету нет - какие-то микросекунды.

→ Ссылка