我試圖根據(jù)特定條件從地圖中刪除一系列元素。我該如何使用STL算法?最初,我想到使用,remove_if但是由于remove_if對(duì)于關(guān)聯(lián)容器不起作用,因此無法使用。是否有適用于地圖的“ remove_if”等效算法?作為一個(gè)簡單的選擇,我想到了遍歷映射和擦除。但是在地圖上循環(huán)并擦除一個(gè)安全的選項(xiàng)嗎?(因?yàn)榈髟诓脸笞兊脽o效)我使用以下示例:bool predicate(const std::pair<int,std::string>& x){ return x.first > 2;}int main(void) { std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six";// does not work, an error// std::remove_if(aMap.begin(), aMap.end(), predicate); std::map<int, std::string>::iterator iter = aMap.begin(); std::map<int, std::string>::iterator endIter = aMap.end(); for(; iter != endIter; ++iter) { if(Some Condition) { // is it safe ? aMap.erase(iter++); } } return 0;}
3 回答

12345678_0001
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
幾乎。
for(; iter != endIter; ) {
if (Some Condition) {
aMap.erase(iter++);
} else {
++iter;
}
}
如果您確實(shí)從迭代器中刪除了一個(gè)元素,則原來將其增加兩次。您可能會(huì)跳過需要?jiǎng)h除的元素。
這是我在許多地方見過使用和記錄的常見算法。
正確的是,擦除后迭代器無效,但是僅迭代器引用了要擦除的元素,其他迭代器仍然有效。因此iter++在erase()通話中使用。
- 3 回答
- 0 關(guān)注
- 1358 瀏覽
添加回答
舉報(bào)
0/150
提交
取消