Автоматически инициализирует значения STL Map?
Возможный дубликат:
Почему класс, используемый как значение в STL-карте, нуждается в конструкторе по умолчанию в...?
Когда я использую карту, значения обязательно инициализируются значениями по умолчанию или я не должен полагаться на это?
Например, скажем, у меня есть следующий код:
map<string, int> myMap;
cout << myMap["Hey"];
Это приведет к выводу "0" с моим компилятором. Это гарантированное поведение? Возможно ли, что это не всегда инициализировалось бы 0?
Ответы
Ответ 1
Укажите стандарт:
ISO/IEC 14882 §23.4.4.3
T& operator[](const key_type& x);
- Эффекты: Если на карте нет ключа, эквивалентного
x
, вставляет value_type(x, T())
в карту. - Требуется:
key_type
должно быть CopyConstructible
, а mapped_type
должно быть DefaultConstructible
. - Возвращает: Ссылка на
mapped_type
, соответствующую x
в *this
. - Сложность: логарифмическая.
Таким образом, гарантируется не только это, но и оценка myMap["Hey"]
также вызывает добавление значения 0 в карту, если раньше не было записи.
Ответ 2
Это значение создает значение для нового ключа. Посмотрите документацию:
A call to this function is equivalent to:
insert(
make_pair(x,T())
);
Это будет переведено на
insert(make_pair("Key", int()));
Итак, да: ваши значения сначала будут нулевыми.