【发布时间】:2019-09-23 11:28:07
【问题描述】:
两个容器的文档都说 emplace() 函数在原地构造元素,但是在构造元素之前它们如何知道新元素的位置?
例如,unordered_set 根据元素的哈希值放置元素。 unordered_set在构造之前如何知道元素的hash值?
我想也许 emplace 函数是用来获取右值,计算新元素的位置并移动对象,但是 insert() 可以做到同样的事情。
【问题讨论】:
两个容器的文档都说 emplace() 函数在原地构造元素,但是在构造元素之前它们如何知道新元素的位置?
例如,unordered_set 根据元素的哈希值放置元素。 unordered_set在构造之前如何知道元素的hash值?
我想也许 emplace 函数是用来获取右值,计算新元素的位置并移动对象,但是 insert() 可以做到同样的事情。
【问题讨论】:
它在规范中没有明确说明它是如何工作的,但通常会发生一个数据结构内部节点对象(包含该值的 rb-tree 节点或哈希桶节点)将从参数构造,然后节点将被链接到数据结构中(对于集合到 rb-tree,对于 unordered_set 到哈希桶),并且如果值已经存在(所以没有添加),节点对象将被销毁。
【讨论】: