两个容器的文档都说 emplace()函数在适当的位置构造元素,但是在构造该元素之前,他们如何知道新元素的位置?
例如, unordered_set 根据元素的哈希值放置元素。 unordered_set 如何在构造元素之前知道其哈希值?
我认为也许 emplace 函数用于获取右值,计算新元素的位置并仅移动对象,但是 insert()可以同样的事情。
答案 0 :(得分:1)
它未明确说明其在规范中的工作方式,但通常会发生的是,将根据参数构造数据结构内部节点对象(包含值的rb-tree节点或哈希桶节点),然后节点将链接到数据结构(进入设置的rb-tree,进入unordered_set的哈希存储桶),并且在值已经存在(因此未添加)的情况下,节点对象将被销毁。 / p>