2008-10-13 164 views

回答

2

根據該:

http://msdn.microsoft.com/en-us/library/0h4c3zkw(VS.80).aspx

RemoveAtPos具有這些語義

刪除存儲在指定位置上的鍵/值對。用於存儲元素的內存被釋放。 pos引用的POSITION變爲無效,雖然映射中任何其他元素的POSITION仍然有效,但它們不一定保持相同的順序。

問題是訂單可以改變 - 這意味着GetNext()不會真的繼續迭代。看起來你需要一次收集你想刪除的POSITIONs,並在下一次刪除它們。刪除POSITION不會使其他POSITION對象失效

+0

是的,這就是我最終的結果。它確實感覺有點麻煩,效率低下,所以我希望能有更好的東西。感謝您的回答。 – 2008-10-14 08:16:57

0

我的第一個想法是調用GetNext,那麼之前保存當前位置,如果你刪除您可以重置它的元素。然而,也許最安全的方法是創建一個包含要保留的元素的新地圖,否則您可能依賴於POSITION內部實現的工作方式。

0

我不是太熟悉CAtlMap,但如果是類似STL的map類型,然後Rob's "first thought"是安全的 - 刪除項目不影響除指向項目的一個(或多個)被刪除任何迭代器。