Как std :: set и std :: unordered_set конструируют элементы с помощью emplace ()? - PullRequest
3 голосов
/ 05 мая 2019

Документация для обоих контейнеров гласит, что функция emplace () создает элементы на месте, но как они узнают местоположение нового элемента до его конструирования?

Например, unordered_set размещает элементы в соответствии с их хэш-значением.Как unordered_set узнает значение хеша элемента до его создания?

Я подумал, что, возможно, функция emplace предназначена для получения значений r, вычисления положенияновый элемент и просто переместите объект, но тогда insert () может сделать то же самое.

1 Ответ

1 голос
/ 05 мая 2019

Точно неизвестно, как это работает в спецификации, но, как правило, будет происходить то, что внутренний объект datastructure (узел rb-дерева или узел хеш-памяти, содержащий значение) будет создан из аргументов, а затемузел будет связан с структурой данных (в rb-дереве для набора, в хэш-корзину для unordered_set), и в случае, если значение уже присутствует (поэтому не добавлено), объект узла будет уничтожен.

...