处理右值时插入与放置

问题描述 投票:0回答:1
std::string myString;
std::unordered_set<std::string> mySet;

mySet.insert(std::move(myString));
mySet.emplace(std::move(myString)); // this is an example, in reality you can't move twice

我了解

insert
emplace
之间的区别。但是用
std::move
来做有什么实际区别吗?哪一个比较好?

c++ stl std
1个回答
1
投票

差异很小或没有,具体取决于容器类型。

如果容器中已存在相等的元素,则您选择的容器

std::unordered_set
可能会无法插入/放置

在这种失败情况下,

emplace
可能会执行不必要的额外步骤,即分配节点并在那里构造对象(以执行哈希),然后销毁对象并取消分配节点。

当您知道传递的类型是包含的类型时,首选插入

© www.soinside.com 2019 - 2024. All rights reserved.