Comment initialiser une carte qui prend une structure comme valeur?

Je suis en utilisant une carte sous la forme d'un tableau associatif de Id -> valeur, où la valeur est un struct la définition de l'objet:

#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 divers questions/réponses ici sur la structure de l'initialisation, mais je suis encore un peu confus. J'ai une série de questions connexes:

  1. Je pourrais ajouter le compilateur option -std=c++0x et être fait avec l'avertissement, mais toujours pas plus avancé sur le problème sous-jacent. Ne serait pas les choses de se briser si j'ai ajouter une méthode à la catégorie struct?
  2. Quelle serait la meilleure façon d'initialiser ce POD struct (catégorie) en plus C++03 conforme?
  3. Fondamentalement, je ne suis pas encore sûr des conséquences de faire les choses d'une façon plutôt que d'une autre façon. Ce genre de tableau associatif (où la clé est l'ID d'un objet) est facile avec PHP, et je suis encore à apprendre sur la bonne façon de le faire en C++. A quoi dois-je prêter attention dans le contexte du code ci-dessus?

Modifier
Les questions suivantes sont liés, mais je n'ai pas compris les réponses quand j'ai lu:
C++ initialiser anonyme struct
c++ de l'Initialisation d'une structure avec un tableau en tant que membre
L'initialisation des structures en C++

source d'informationauteur augustin