两种容器的文档都说明emplace()函数可以原地构造元素。但在元素构造之前,它们如何知道新元素的位置呢?
例如,unordered_set按照哈希值放置元素。在元素被构造之前,它如何知道该元素的哈希值呢?
我想也许emplace函数的目的是要接受右值参数,计算新元素的位置并移动对象。但是,insert()也能做同样的事情。
规范中未明确说明其工作原理,但通常情况下,将从参数构建数据结构内部节点对象(rb-tree节点或包含值的哈希桶节点),然后将该节点链接到数据结构中(对于set是链接到rb-tree中,对于unordered_set是链接到哈希桶中)。如果该值已经存在(即未添加),则会销毁该节点对象。