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
来做有什么实际区别吗?哪一个比较好?
差异很小或没有,具体取决于容器类型。
如果容器中已存在相等的元素,则您选择的容器
std::unordered_set
可能会无法插入/放置。
在这种失败情况下,
emplace
可能会执行不必要的额外步骤,即分配节点并在那里构造对象(以执行哈希),然后销毁对象并取消分配节点。
当您知道传递的类型是包含的类型时,首选插入