J'Initialisation statiquement un grand (~ 20kb) std :: unordered_mapinitialisation statique de grande carte
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"}};
et l'analyse de code se plaint de l'utilisation de la pile:
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>
Cet avertissement est raisonnable si toutes les données de la table sont mises dans la pile dans le cadre du constructeur unordered_map
.
Y a-t-il un meilleur moyen de faire cette initialisation?
Au lieu de coder les chaînes, pourquoi ne pas les charger à partir d'un fichier texte, c'est-à-dire 'csv'? –
quelque chose comme ça http://stackoverflow.com/questions/10951447/load-stdmap-from-text-file est définitivement faisable, existe-t-il d'autres alternatives? Je voudrais garder la carte 'const' si possible – jnnnnn
tbh Je ne pense pas qu'il existe un meilleur moyen. Le chargement des chaînes à partir d'un fichier texte présente de nombreux avantages. pour un, vous n'avez pas à recompiler chaque fois que les valeurs des clés changent. En outre, vous pouvez visualiser votre csv dans Excel et vérifier les doublons ou les erreurs. –