Как инициализировать карту, которая принимает структуру как значение?

Я использую карту как ассоциативный массив идентификаторов -> значение, где значение представляет собой структуру, определяющую объект:

#include 

struct category {
        int id;
        std::string name;
};

std::map categories;

int main() {
        categories[1] = {1, "First category"};
        categories[2] = {2, "Second category"};

}

Приведенный выше код компилируется с g ++, но со следующим предупреждением:

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x

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

  1. Я мог бы добавить параметр компилятора -std = c ++ 0x и завершить работу с предупреждением, но все равно не буду в курсе основной проблемы. Разве все не сломается, если я добавлю метод в структуру категории?

  2. Как лучше всего инициализировать эту структуру (категорию) POD более совместимым с C ++ 03 способом?

  3. В принципе, я не и все же уверен в последствиях того, что поступает так, а не иначе. Такой тип ассоциативного массива (где ключ - это идентификатор объекта) легко использовать с PHP, и я все еще изучаю правильный способ сделать это на C ++. Есть ли что-нибудь, на что мне следует обратить внимание в контексте приведенного выше кода?

Edit
Следующие вопросы связаны, но я не понял ответов, когда впервые прочитал их:
C ++ инициализировать анонимную структуру
c ++ Инициализация структуры с массивом в качестве члена
Инициализация структур в C ++

17
задан Community 23 May 2017 в 12:19
поделиться