Подтвердить что ты не робот

Почему set/map emplace_hint не возвращает логическое значение

В соответствии с cppreference функции std::set и std::map emplace возвращают a std::pair<iterator,bool>, с значением bool, чтобы сказать if вставка действительно имела место.

Однако emplace_hint возвращает iterator либо вставленному элементу, либо существующему элементу в наборе или карте, если вставка не выполнялась. Здесь нет значения bool.

Есть ли причина для этой разницы в интерфейсе этих подобных функций?

Обновление

Функция insert возвращает значение bool только при отсутствии подсказки. Это согласуется с поведением emplace и emplace_hint. Возникает вопрос: есть ли причина не возвращать bool, когда дается подсказка?

Я могу только подумать, что, возможно, есть причина в производительности, потому что пользователь обычно дает подсказку после операции lower_bound/upper_bound, поэтому она уверен, что вставка произойдет.

4b9b3361

Ответ 1

emplace_hint делает ли это вероятным совпадение с намеченным insert: emplace было изначально предложенным как пара перегрузок, зеркалирование insert, но намеченная перегрузка была переименована после LWG 763, хотя Josuttis хотел переименуйте не намеченную версию)

Указанный insert для ассоциативных контейнеров принимает итератор и значение и возвращает итератор, чтобы быть совместимым с обычным insert в последовательных контейнерах в общем коде. как упоминалось в книге Йосуттиса. Эта совместимость используется std:: inserter