知识卡片

置入不总更快

普通读书笔记卡 · 1445

内容

emplace 通过参数直接构造容器元素,可能省掉插入前的临时对象;收益取决于实际构造、参数类型以及是否因重复键而拒绝插入。它还可能接受 explicit 构造带来的意外转换。不能把“能编译”或“用了置入”当成更安全、更快的证明。

参考来源

- 位置:《Effective Modern C++》第8章《微调》,条款四十二:考虑使用置入代替插入(源文件:_epub-src/EPUB/text/ch009.xhtml) - 结论依据:原文列出置入更高效的三个条件,并警告它会接受插入拒绝的类型转换。 - 原始内容:原则上,置入函数有时会比插入函数高效,并且不会更差。 实际上,当以下条件满足时,置入函数更快:(1)值被构造到容器中,而不是直接赋值;(2)传入的类型与容器的元素类型不一致;(3)容器不拒绝已经存在的重复值。 置入函数可能执行插入函数拒绝的类型转换。