Existe algum motivo para usar std :: map :: emplace () em vez de try_emplace () em C ++ 1z?
No C ++ 17,std::map
estd::unordered_map
obteve um novo modelo de função de membro:try_emplace()
. Esta nova adição, proposta emn4279, comporta-se de maneira semelhante aemplace()
, mas tem as seguintes vantagens:
try_emplace()
não sai dos argumentos rvalue se a inserção não ocorrer. Isso é útil ao manipular mapas cujos valores são do tipo somente movimentação, comostd::unique_ptr
.try_emplace()
trata a chave e os argumentos para omapped_type
separadamente, o que o torna um pouco mais intuitivo do que os mutadores genéricos que são expressos em termos devalue_type
(qual éstd::pair
)Dadas as vantagens acima, você usariaemplace()
do C ++ 11 em vez detry_emplace()
de C ++ 1z ao escrever código somente em C ++ 1z?