在c++開發中,std::map是經常使用到的容器,由鍵值就可以取出對應的值。
在使用map時,如果想從map中刪除符合某一條件的元素,應該如何操作?
我自己剛開始使用erase從迭代器中移除符合我需要刪除條件的鍵值對時,出錯了:
#include #include int main()
return 0;
}
出現了以下錯誤:
出現這個問題的原因是,當把第乙個符合條件的元素移除後,迭代器就失效了,
然後再執行it++,當然就會出現問題了。
出現問題了,
那麼程式就需要修改一下,it++不能放在for迴圈的語句裡面了。
那就換個地方試一下,將it++放在erase中:
#include #include #include int main()
return 0;
}
這樣又出現了新的問題,死迴圈,原因是,第乙個元素的key值 模2 並不等於0,
而又沒有進行往下迭代,故而進入死迴圈。所以還需要對 key值 模2 不等於0的項,
#include #include #include int main()
for (auto it = maptest.begin(); it != maptest.end();it++)
return 0;
}
這樣才是從map中刪除符合條件的元素的正確做法。
上述**執行結果:
std map的安全遍歷並刪除元素的方法
首先我們講遍歷std map,大部分人都能寫出第一種遍歷的方法,但這種遍歷刪除的方式並不太安全。第一種 for迴圈變數 include include includeusing namespace std int main return 0 結果如下 key 0 value 555555555555...
std map迴圈遍歷刪除元素出現詭異現象
std mapm1,m1.insert std make pair 4,4 for auto it m1.begin it m1.end 這段 在執行的時候會出現if語句執行完繼續執行else語句。為什麼會出現這種現象?先來看一下map中的erase函式 可以看到erase並沒有返回值,不像vect...
物件陣列篩選指定元素 刪除指定元素
給乙個陣列物件,再給乙個陣列字串,篩選出包含陣列字串的陣列物件部分 const arr1 const arr2 1,2 const arr3 arr1.filter item arr2.includes item.id arr3為 意思是,arr2中includes包含arr1id的為true,ar...