При использовании буста unordered_map, если я сделаю map [ключ], будет ли возвращаемый тип ссылкой на значение V или копией значения?
Спасибо
Это ссылка, иначе это не сработает:
map[key] = value;
Согласно документация, казалось бы, ссылка.
mapped_type& operator[](key_type const& k);
mapped_type& оператор [] (тип ключа& к);
Последствия:
Если контейнер еще не содержит элементов с ключом, эквивалентным k, вставляется значение std :: pair (k, mapped_type ())Возвращает:
Ссылка на x.second где x — элемент, уже находящийся в контейнере, или недавно вставленный элемент с ключом, эквивалентным kБроски:
Если исключение выдается операцией, отличной от вызова hasher, функция не имеет никакого эффекта.Заметки:
Может сделать недействительными итераторы, но только если вставка приводит к тому, что коэффициент загрузки будет больше или равен максимальному коэффициенту загрузки.Указатели и ссылки на элементы никогда не аннулируются.
Оператор доступа []
всегда возвращает ссылку. Элемент карты будет создан, если он не существует. Поэтому, чтобы избежать повторных поисков, полезен следующий шаблон:
std::unordered_map<K, T> m = populate_me();
T & value = m[key]; // created if non-existent
// use "value" rather than repeated "m[key]"