[問題] c++ multimap 的 find

看板C_and_CPP (C/C++)作者 (wagaru)時間14年前 (2011/08/26 18:31), 編輯推噓2(2011)
留言13則, 4人參與, 最新討論串1/1
先說一下我的目的 是要從一個multimap中刪元素 比對multimap中 pair 的 value 值再決定要不要刪 (不是key值) 但因為在用iterator 拜訪元素的過程中不能刪除此iterator 否則會出錯 因此小弟想說先將要刪的值存在一個vector裡 之後再用find的方法刪除 問題是 multimap 的 find() 的參數是一個key 但我想要直接找到特定的pair 而在algorithm裡的find,似乎也不讓我丟入一個 pair 當參數 請問有什麼好方法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.107.81

08/26 18:39, , 1F
問題是 multimap 的 find() 的參數是一個key
08/26 18:39, 1F

08/26 18:39, , 2F
08/26 18:39, 2F

08/26 18:40, , 3F
可以換成 找value嗎?
08/26 18:40, 3F

08/26 18:58, , 4F
如果你用的環境對 C++0x 有完善支援,可以考慮跳槽 C++0x
08/26 18:58, 4F

08/26 19:02, , 5F
因為 multimap 的 erase 在 C++0x 會傳回下一個 iterator
08/26 19:02, 5F

08/26 19:08, , 6F
(不然也可以參考 remove_if 搞不好你會有靈感 xD)
08/26 19:08, 6F

08/26 22:23, , 7F
所以要刪除的元素的 key 值知道嗎?
08/26 22:23, 7F

08/26 23:27, , 9F
似乎不能換成value
08/26 23:27, 9F

08/26 23:27, , 10F
可能看一下remove_if吧,key的話我知道
08/26 23:27, 10F

08/27 00:14, , 11F
看起來似乎是刪除iterator後再++時會出問題
08/27 00:14, 11F

08/27 00:14, , 12F
因此在呼叫erase前先將iterator++就可以了
08/27 00:14, 12F

08/27 00:36, , 13F
補充一下,不是所有 container 都可以這樣玩 :P
08/27 00:36, 13F
文章代碼(AID): #1ELtOStj (C_and_CPP)
文章代碼(AID): #1ELtOStj (C_and_CPP)