J'utilise une carte comme un tableau associatif d'ID -> valeur, où la valeur est une struct définition de l'objet:Comment initialiser une carte qui prend une structure comme valeur?
#include <map>
struct category {
int id;
std::string name;
};
std::map<int, category> categories;
int main() {
categories[1] = {1, "First category"};
categories[2] = {2, "Second category"};
}
Le code ci-dessus compile avec g ++, mais avec l'avertissement suivant:
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
J'ai lu diverses questions/réponses ici sur l'initialisation de la structure, mais je suis encore un peu confus. J'ai une série de questions connexes:
Je pourrais ajouter l'option du compilateur std = C++ 0x et être fait avec l'avertissement, mais toujours pas les plus sages sur le problème sous-jacent. Les choses ne se casseraient-elles pas si j'ajoutais une méthode à la catégorie struct? Quel serait le meilleur moyen d'initialiser cette structure POD (catégorie) d'une manière plus conforme à C++ 03? Fondamentalement, je ne suis pas encore sûr des conséquences de faire les choses d'une manière plutôt que d'une autre manière. Ce type de tableau associatif (où la clé est l'ID d'un objet) est facile avec PHP, et j'apprends toujours la bonne façon de le faire en C++. Y a-t-il quelque chose que je devrais faire attention dans le contexte du code ci-dessus?
Modifier
Les questions suivantes sont liées, mais je ne comprenais pas les réponses quand je les lis:
C++ initialize anonymous struct
c++ Initializing a struct with an array as a member
Initializing structs in C++
Enfin quelqu'un qui a tout compris. Merci, Charles! – sbi
Merci à Charles Bailey d'avoir pris le temps de résumer toute la discussion. Merci @sbi pour avoir poussé ça. J'apprécie beaucoup tout. :) – augustin
BTW, le titre de la question ne reflète finalement pas le contenu de la discussion.N'hésitez pas à modifier le titre de la question pour quelque chose qui serait plus approprié. – augustin