Как set::emplace обрабатывает объекты, которые уже находятся в наборе?
У меня есть набор объектов, и я хочу использовать emplace для добавления объектов в набор. Если эквивалентный объект еще не существует в наборе, set::emplace создает объект и помещает его в набор. Если набор уже имеет эквивалентный объект, set::emplace не добавляет объект в список. В этом случае он создает объект и уничтожает его, создает его и пропускает, или не создает его вообще? Или это будет делать что-то еще?
C++ 11, gcc 4.7.0
2 ответа
Предполагается, что объект вообще не должен создаваться, но, как правило, все равно будет (конечно, с использованием libstd ++); технически это ошибка, но больше в стандарте, чем что-либо еще.
Более подробные сведения можно найти в предыдущем моем ответе на очень похожий вопрос:
Из § 23.2.4 Таблица 102 - Требования к ассоциативным контейнерам (в дополнение к контейнеру)
emplace(args)
Эффекты: вставляет
value_type
объектt
построен сstd::forward<Args>(args)...
тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным ключуt
,