Как set :: emplace обрабатывает объекты, которые уже есть в наборе?

У меня есть набор объектов, и я хочу использовать emplace для добавления объектов в набор. Если эквивалентный объект еще не существует в наборе, set :: emplace создает объект и помещает его в набор. Если набор уже имеет эквивалентный объект, set :: emplace не добавляет объект в список. В этом случае, он создает объект и уничтожает его, создает его и пропускает его, или не создает его вообще? Или это будет делать что-то еще?

C ++ 11, gcc 4.7.0

2

Решение

Он вообще не должен создавать объект, но, как правило, все равно будет (конечно, используя libstd ++); технически это ошибка, но больше в стандарте, чем что-либо еще.

Более подробные сведения можно найти в предыдущем моем ответе на очень похожий вопрос:

2

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

Из § 23.2.4 Таблица 102 — Требования к ассоциативным контейнерам (в дополнение к контейнеру)

emplace(args)

Эффекты: вставляет value_type объект t построен с std::forward<Args>(args)... тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным ключу t,

3

По вопросам рекламы [email protected]