std map 刪除指定條件的元素

2021-07-10 10:52:21 字數 979 閱讀 3723

在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...