Std:: map:: insert change in С++ 17
Я вижу, что метод insert
std::map
и std::unordered_map
будет меняться от
template<class P> std::pair<iterator,bool> insert(P&& value); (C++11)
к
std::pair<iterator,bool> insert(value_type&& value); (C++17)
Однако для этих контейнеров value_type
есть std::pair<A const, int>
. Здесь два вопроса:
- Почему это изменение? Что такое потенциал роста?
- Как это будет работать, чтобы переместить ключ при вставке? Версия С++ 11 принимает что-либо (ограничение на
P
равно default_constructible<value_type, P&&>
), затем std::pair<A, int>
- это большую часть времени, когда тип этого аргумента совпадает с типом, возвращаемым std::make_pair
, и может вызовите конструктор перемещения A
. Но в версии С++ 17 этот аргумент передается в value_type
, где A
является const, а затем не движется. A должен быть скопирован, если я не пропускаю что-то. Или С++ 17 что-то изменит с этой стороны?
Спасибо!
Ответы
Ответ 1
В С++ 17 добавлена дополнительная не-шаблонная перегрузка в insert
.
Такая перегрузка имеет то преимущество, что она позволяет построить синтаксис .insert( { {key}, {value, args} } )
- {}
. Аргументы template
не могут быть переданы инструкциями построения {}
без явного типа.