Я использую карту как ассоциативный массив идентификаторов → значение, где это значение является структурой, определяющей объект:
#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"};
}
Вышеприведенный код компилируется с помощью g++, но со следующим предупреждением:
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Я прочитал различные вопросы/ответы здесь об инициализации структуры, но я все еще немного смущен. У меня есть ряд связанных вопросов:
-
Я мог бы добавить параметр компилятора -std = С++ 0x и сделать это с предупреждением, но все же не буду более мудрым относительно основной проблемы. Разве не сломаются вещи, если я добавлю метод в структуру структуры?
-
Каким будет лучший способ инициализировать эту структуру (категорию) POD более чем на С++ 03?
-
В принципе, я еще не уверен в последствиях делать что-то в одном направлении, а не в другом. Этот тип ассоциативного массива (где ключ - это идентификатор объекта) легко с PHP, и я все еще узнаю о том, как это сделать на С++. Есть ли что-нибудь, на что я должен обратить внимание в контексте вышеприведенного кода?
Edit
Следующие вопросы связаны, но я не понял ответы, когда их впервые прочитал:
С++ инициализировать анонимную структуру
С++ Инициализация структуры с массивом в качестве участника
Инициализация структур на С++