所以我有一個multimap,其中鍵是一個結構,而值是另一個結構。從multimap中完全刪除元素(C++)
multimap<struct, struct> multimap1;
multimap1
包含(格式爲key
:value
)
1: Random Value 1
2: Random Value 2
3: Random Value 3
4: Random Value 4
我試圖抹掉值和從multimap中一個關鍵。假設我想刪除multimap的第二個條目。結果應該是這樣的:
1: Random Value 1
3: Random Value 3
4: Random Value 4
我有一個指向第二值迭代器,所以當我用multimap1.erase(it)
抹掉它,它應該刪除第二項(至少我認爲它應該)。我一直在閱讀刪除條目和multimaps,似乎只有從multimap中刪除的值,而不是關鍵。因此,如果刪除與一個迭代器指向第二值第二項,它會做到這一點(糾正我,如果我錯了):
1: Random Value 1
2:
3: Random Value 3
4: Random Value 4
是否有一種方式來獲得的中間值結果呢?
編輯:所以我顯然是錯的。如果你擦除,你會得到中間結果。我想弄清楚爲什麼我沒有正確擦除,因爲當我調用擦除時,我的代碼出現了段錯誤。如果我打電話給it->first
,它會返回我想要移除的元素的鍵。如果我撥打it->second
,它將返回該密鑰的值。所以如果我打電話multimap.erase(it)
,它應該刪除整個事情,對嗎?
編輯2:在我的代碼中,我打印出it->first
和it->second
以確保指針指向正確的元素並且它是。當我打電話給multimap.erase(it)
時,我停止了循環並打印出multimap中的其餘元素。它正確打印的第一個元素,但隨後的第二元件被印刷像這樣(由編譯器輸出):
GEWolfC?`6??2?x3??2??2?x [email protected]?????BUYA????BadWolfCorp1????AMstyKrq?4?X3??(4??3?
X3PlanetExpress1GEqp7?L???5?d?5?x5??5?d2q7?7?X3??(4??3?X3??
所以,很顯然,它是不正確刪除。我在linux上運行g ++ 4.7。
編輯3:抱歉做了這麼多的編輯,我想保留原來的問題,以便將來可以引用它。只是爲了試驗,我打電話給multimap.erase(it->first)
,那個工作正常。有人可以向我解釋爲什麼這個工作以及這裏發生了什麼?
你試過嗎? 「 –
」似乎只有這個值是從multimap中刪除的,而不是密鑰。「這不是真的,我很好奇你是怎麼想的。 – jrok
那麼,我有循環,將使用迭代器刪除某些元素,但我停止了短循環。然後我打印剩餘的多重地圖並且打印不正確。 – OGH