一、Map.erase基本概念
Map是C++ STL库中的一个关联容器,用于存储键-值对。其中,键和值可以是任意类型,具备映射关系。Map中的键是唯一的,如果插入时键已存在,则该项的值会被更新。erase是Map中用于删除元素的方法。
二、Map.erase用法
Map.erase有多个重载形式,其中最常用的形式是只传入键值,例如:
mapm; m[1] = "one"; m[2] = "two"; m.erase(1); // 删除键为1的项
该代码中,先创建了一个int到string的Map,并插入两个键值对。然后,调用erase方法删除键为1的项。
除了只传入键值的情况,erase方法还可以传入迭代器或迭代器区间,用于删除指定位置的项。例如:
mapm; m[1] = "one"; m[2] = "two"; auto it = m.find(1); // 获取键为1的项的迭代器 m.erase(it); // 删除该项
该代码中,先创建了一个int到string的Map,并插入两个键值对。然后,通过find方法获取键为1的项的迭代器,并将该迭代器传入erase方法进行删除。
除了以上两种情况,erase方法还可以在删除时返回被删除项的值。例如:
mapm; m[1] = "one"; m[2] = "two"; string val = m.erase(1); // 删除键为1的项,并返回其值
该代码中,先创建了一个int到string的Map,并插入两个键值对。然后,调用erase方法删除键为1的项,并将返回值赋给val。
三、Map.erase注意事项
在删除Map中的键值对时,需要注意以下几点:
1. 如果试图删除一个未在map中出现的元素,将不会产生任何影响。
mapm; m.erase(1); // 不会产生任何影响,因为map中不存在键为1的项
2. 对于关键字相同的元素,Map只会保留最后插入的一个。因此,在进行删除时,只会删除第一个匹配的元素。
mapm; m[1] = "one"; m[1] = "new one"; m.erase(1); // 只会删除最后插入的"new one"元素,因为第一个元素被覆盖了
3. 使用迭代器删除元素后,该迭代器会失效。因此,在进行删除操作后,不要继续使用之前的迭代器。
mapm; 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; }