簡體   English   中英

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

[英]How does std::set and std::unordered_set construct elements in place with emplace()?

兩個容器的文檔都說emplace()函數構造了元素,但是在元素構造之前它們如何知道新元素的位置?

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

我想,也許在布設功能是為了取右值,計算新元素的位置,只是移動對象,但然后插入()可以做同樣的事情。

它沒有明確說明它在規范中是如何工作的,但一般情況下會發生的是數據結構 - 內部節點對象(rb-tree節點或包含該值的散列桶節點)將從參數構造,然后該節點將是鏈接到數據結構(進入集合的rb-tree,進入unordered_set的散列桶),並且如果該值已經存在(因此未添加),節點對象將被銷毀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM