C ++ 11标准的哪一部分(here's a copy of a draft standard)需要关联容器,如std :: set,std :: map,std :: unordered_set和std :: unordered_map,以立即调用对象的析构函数从他们身上消失了?
换句话说 - 符合标准的关联容器是否允许延迟(而不是删除!)对密钥的调用和/或它们存储的密钥和值的析构函数?
如果没有,标准中的哪一部分禁止它?
我问,因为我对关联容器中的延迟删除(有时称为弱删除)感兴趣。这是一种从实际数据保留在原位的结构中“擦除”一个键(或键/值对)的方法,但包含它的节点被标记为死。这些有时被称为墓碑。它们被用在许多关于数据结构的理论论文中,sometimes used in practice。
一个非常简单的例子是在开放寻址的哈希表中删除,有时用逻辑删除来实现。最终重建哈希表时,将调用所有析构函数,并且可以实际最终删除和解除分配逻辑删除的键/值对。
答案 0 :(得分:1)
表中有关于描述erase
调用要求的关联容器的一般要求。
E.g。 a.erase(q)
|擦除q
指向的元素。
map
的元素类型是一对键和值。对“擦除”没有合理的解释,不涉及元素的正确破坏(关键和价值)。我怀疑标准中对这种情况有更明确的措辞。