C 标准的哪一部分要求set ::擦除呼叫灾难源

What section of the C++ standard requires that set::erase calls destructors promptly

本文关键字:擦除 呼叫 set 标准 一部分      更新时间:2023-10-16

c 11标准的哪个部分(这是标准草案的副本)需要诸如std :: set,std :: map,std,std,std :: unordered_set和std之类的关联容器:: unordered_map立即调用从中删除的对象的破坏者?

换句话说 - 允许允许符合标准的关联容器延迟(不是Elide!)他们存储的键和值的键和/或值击路仪的呼叫?

如果不是,则标准中的哪个部分禁止它?

我问,因为我对关联容器中的懒惰删除(有时称为弱删除)感兴趣。这是一种从实际数据保留的结构中"擦除"键(或键/值对)的方法,但包含它的节点被标记为已死。这些有时被称为墓碑。它们用于许多有关数据结构的理论论文,有时在实践中使用。

一个非常简单的示例是在开放式的哈希表中删除,有时用墓碑实现。当最终重建哈希表时,所有的破坏者都会被调用,并且可以实际删除和删除墓碑键/值对。

表中有一般要求的关联容器,这些容器描述了erase调用的要求。

例如。a.erase(q) |擦除q指向的元素。

map的元素类型是一对键和值。对"擦除"没有明智的解释,不涉及元素的适当破坏(密钥和价值)。我怀疑标准中这种情况有什么明确的措辞。