Visual C ++的std :: map实现

时间:2010-09-18 12:45:50

标签: c++ visual-c++ stl map tree

如何在Visual C ++中实现std :: map?

我知道一些树数据结构只是在删除它们时将节点标记为已删除,而不是立即删除它们。我需要确保我的元素永远不会与地图中不再存在的元素进行比较。

编辑:

我知道实施可能是正确的。合同,要求我对元素类型进行完全弱排序。但是,我只有一个部分排序,它无法比较不同时存在的元素。

3 个答案:

答案 0 :(得分:4)

回答一般的数据结构实施而不是MSVC或std::map

您似乎认为容器需要知道该标志的用户才能忽略已删除的元素。

如果实现只是将元素标记为不再包含,则它将作为实现细节执行。这意味着从容器的任何外部用户的角度来看,该元素根本不会在容器中可见。特别是,容器上的任何查找方法都会注意到该标志并忽略它附加的任何内容。只要实现正确地保留了语义,你真的不需要担心它是否使用了标记技术。

答案 1 :(得分:4)

实现是否维护已擦除的节点,它必须在节点擦除时调用包含的对象析构函数。之后,它不可能将对象传递给比较函数,因为这会导致未定义的行为,这将使其成为不合规的实现。

答案 2 :(得分:3)

我不知道Microsoft STL实现中的任何错误,您必须在此担心。对于类来说,访问比较已经删除的元素将是一个错误,尽管我可以想象清除可能是如何在带外进行的。

如果您确实需要实现详细信息,请查看IDE中正在运行的代码中<map><xtree>中元素删除背后的源代码。