簡體   English   中英

Visual C ++的std :: map實現

[英]Visual C++'s implementation of std::map

如何在Visual C ++中實現std :: map?

我知道有些樹數據結構只是在刪除節點時將其標記為已刪除,而不是立即刪除它們。 我需要確保永遠不要將我的元素與地圖中不再存在的元素進行比較。

編輯:

我知道該實現可能是正確的。 合同,這要求我對元素類型進行完全弱排序。 但是,我只有部分排序,這無法比較不在同一時間存在的元素。

回答一般的數據結構實現,而不是MSVC或std::map

您似乎認為容器的用戶需要注意該標志,以便忽略已刪除的元素。

如果實現只是將某個元素標記為不再包含,它將作為實現細節進行標記。 這意味着,從容器的任何外部用戶的角度來看,該元素在容器中將根本不可見。 特別是,容器上的任何查找方法都會注意到該標志,並忽略其附加的任何內容。 只要實現能夠正確保留語義,您就真的不必擔心它是否使用了標記技術。

無論是實現維護已被擦除或沒有節點,當節點被刪除它必須調用包含的對象的析構函數。 之后,它可能無法將對象傳遞給比較函數,因為這將導致未定義的行為,這將使其成為不合格的實現。

我不知道您在這里擔心的Microsoft STL實現中的任何錯誤。 盡管可以想象帶外清理可能會發生,但該類訪問比較已刪除的元素將是一個錯誤。

如果您確實需要實現細節,請查看IDE中正在運行的代碼中<map><xtree>元素刪除背后的源代碼。

暫無
暫無

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

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