Возвращает ли boost :: unordered_map ссылку или копию значения?

При использовании буста unordered_map, если я сделаю map [ключ], будет ли возвращаемый тип ссылкой на значение V или копией значения?

Спасибо

0

Решение

Это ссылка, иначе это не сработает:

map[key] = value;
2

Другие решения

Согласно документация, казалось бы, ссылка.

mapped_type& operator[](key_type const& k);
2

От Повысить документацию :

mapped_type& оператор [] (тип ключа& к);

Последствия:
Если контейнер еще не содержит элементов с ключом, эквивалентным k, вставляется значение std :: pair (k, mapped_type ())

Возвращает:
Ссылка на x.second где x — элемент, уже находящийся в контейнере, или недавно вставленный элемент с ключом, эквивалентным k

Броски:
Если исключение выдается операцией, отличной от вызова hasher, функция не имеет никакого эффекта.

Заметки:
Может сделать недействительными итераторы, но только если вставка приводит к тому, что коэффициент загрузки будет больше или равен максимальному коэффициенту загрузки.

Указатели и ссылки на элементы никогда не аннулируются.

1

Оператор доступа [] всегда возвращает ссылку. Элемент карты будет создан, если он не существует. Поэтому, чтобы избежать повторных поисков, полезен следующий шаблон:

std::unordered_map<K, T> m = populate_me();

T & value = m[key];   // created if non-existent

// use "value" rather than repeated "m[key]"
0
По вопросам рекламы [email protected]