Я статически инициализируется большой (~ 20kb) Std :: unordered_mapстатическая инициализация большой карте
const std::unordered_map<std::string, std::string> mapStringToString{
{"AAF", "ELN"}, {"ACT", "POC"}, {"AEK", "THJ"}, {"AFO", "EUP"},
{"AHB", "HYW"}, {"AIB", "GFW"}, {"AJX", "BUX"}, {"ALD", "FKP"},
{"ALX", "LWB"}, {"AMY", "NQB"}, {"AOI", "GUC"}, {"ASW", "VMH"},
{"ATQ", "SXK"}, {"AVL", "ENB"}, {"BCJ", "NSX"}, {"BEM", "QVR"},
{"BGU", "WPU"}, {"BJR", "ZCS"}, {"BJT", "ZTK"}, {"BOY", "FYU"},
...
{"XSJ", "FRR"}, {"XUD", "NUI"}, {"XVH", "QTI"}, {"XVJ", "TGG"},
{"XWK", "AZB"}, {"XYQ", "YTO"}, {"YAG", "ZQR"}, {"YAY", "UJY"},
{"YBN", "FEB"}, {"YCR", "EPQ"}, {"YHU", "UUD"}, {"YIG", "YMJ"},
{"YME", "EEZ"}, {"YNE", "EIU"}, {"YTC", "IOC"}, {"YTS", "JQM"},
{"YUH", "JPF"}, {"ZDY", "LFQ"}, {"ZFY", "YIH"}, {"ZMF", "BPK"},
{"ZPR", "TNG"}, {"ZTM", "DFJ"}, {"ZVB", "ZSV"}, {"ZXH", "IOA"},
{"ZZR", "RQG"}};
и анализ кода жалуется на использование стека:
C6262 Excessive stack usage Function uses '19920' bytes of stack: exceeds /analyze:stacksize '16384'.. This allocation was for a compiler-generated temporary for 'struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > [249]' at line 0. Consider moving some data to heap. <no file>
Это предупреждение является разумным, если все данные в таблице помещаются в стек как часть конструктора unordered_map
.
Есть ли лучший способ сделать эту инициализацию?
Вместо того, чтобы кодировать строки, почему бы не загрузить их из какого-либо текстового файла, то есть 'csv'? –
что-то вроде этого http://stackoverflow.com/questions/10951447/load-stdmap-from-text-file, безусловно, выполнимо, есть ли другие альтернативы? Я хотел бы сохранить карту 'const', если возможно – jnnnnn
tbh Я не думаю, что есть лучший способ. Загрузка строк из текстового файла дает много преимуществ. во-первых, вам не нужно перекомпилировать каждый раз, когда изменяются значения ключей. Кроме того, вы можете визуализировать свой CSV в Excel и проверять наличие дубликатов или ошибок. –