Подтвердить что ты не робот

Автоматически инициализирует значения STL Map?

Возможный дубликат:
Почему класс, используемый как значение в STL-карте, нуждается в конструкторе по умолчанию в...?

Когда я использую карту, значения обязательно инициализируются значениями по умолчанию или я не должен полагаться на это?

Например, скажем, у меня есть следующий код:

map<string, int> myMap;
cout << myMap["Hey"];

Это приведет к выводу "0" с моим компилятором. Это гарантированное поведение? Возможно ли, что это не всегда инициализировалось бы 0?

4b9b3361

Ответ 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()));

Итак, да: ваши значения сначала будут нулевыми.