std :: set和std :: unordered_set如何使用emplace()构造元素?

时间:2019-05-05 17:59:53

标签: c++ c++11 stl set emplace

两个容器的文档都说 emplace()函数在适当的位置构造元素,但是在构造该元素之前,他们如何知道新元素的位置?

例如, unordered_set 根据元素的哈希值放置元素。 unordered_set 如何在构造元素之前知道其哈希值?

我认为也许 emplace 函数用于获取右值,计算新元素的位置并仅移动对象,但是 insert()可以同样的事情。

1 个答案:

答案 0 :(得分:1)

它未明确说明其在规范中的工作方式,但通常会发生的是,将根据参数构造数据结构内部节点对象(包含值的rb-tree节点或哈希桶节点),然后节点将链接到数据结构(进入设置的rb-tree,进入unordered_set的哈希存储桶),并且在值已经存在(因此未添加)的情况下,节点对象将被销毁。 / p>