一、Map.erase基本概念
Map是C++ STL庫中的一個關聯容器,用於存儲鍵-值對。其中,鍵和值可以是任意類型,具備映射關係。Map中的鍵是唯一的,如果插入時鍵已存在,則該項的值會被更新。erase是Map中用於刪除元素的方法。
二、Map.erase用法
Map.erase有多個重載形式,其中最常用的形式是只傳入鍵值,例如:
map m; m[1] = "one"; m[2] = "two"; m.erase(1); // 刪除鍵為1的項
該代碼中,先創建了一個int到string的Map,並插入兩個鍵值對。然後,調用erase方法刪除鍵為1的項。
除了只傳入鍵值的情況,erase方法還可以傳入迭代器或迭代器區間,用於刪除指定位置的項。例如:
map m; m[1] = "one"; m[2] = "two"; auto it = m.find(1); // 獲取鍵為1的項的迭代器 m.erase(it); // 刪除該項
該代碼中,先創建了一個int到string的Map,並插入兩個鍵值對。然後,通過find方法獲取鍵為1的項的迭代器,並將該迭代器傳入erase方法進行刪除。
除了以上兩種情況,erase方法還可以在刪除時返回被刪除項的值。例如:
map m; m[1] = "one"; m[2] = "two"; string val = m.erase(1); // 刪除鍵為1的項,並返回其值
該代碼中,先創建了一個int到string的Map,並插入兩個鍵值對。然後,調用erase方法刪除鍵為1的項,並將返回值賦給val。
三、Map.erase注意事項
在刪除Map中的鍵值對時,需要注意以下幾點:
1. 如果試圖刪除一個未在map中出現的元素,將不會產生任何影響。
map m; m.erase(1); // 不會產生任何影響,因為map中不存在鍵為1的項
2. 對於關鍵字相同的元素,Map只會保留最後插入的一個。因此,在進行刪除時,只會刪除第一個匹配的元素。
map m; m[1] = "one"; m[1] = "new one"; m.erase(1); // 只會刪除最後插入的"new one"元素,因為第一個元素被覆蓋了
3. 使用迭代器刪除元素後,該迭代器會失效。因此,在進行刪除操作後,不要繼續使用之前的迭代器。
map m; m[1] = "one"; auto it = m.find(1); m.erase(it); m[1] = "new one"; // 這裡修改元素1,再次調用it訪問該元素將會出錯
四、完整代碼示例
#include <iostream> #include <map> using namespace std; int main() { // 創建並填充一個Map map<int,string> m; m[1] = "one"; m[2] = "two"; // 刪除鍵為1的項 m.erase(1); // 刪除迭代器指向的項 auto it = m.find(2); m.erase(it); // 刪除後訪問 if (m.find(1) == m.end()) { cout << "元素1已被刪除" << endl; } // 獲取刪除的鍵值對值 string val = m.erase(2); cout << "被刪除鍵值對的值:" << val << endl; return 0; }
原創文章,作者:VJVAS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329977.html