一、erase方法的基本用法
在C++的STL中,map是一种非常常用的关联容器,又称为字典或者映射。在使用map时,常常需要添加、删除元素。其中,erase方法是map容器中常用的删除元素的方法。
erase方法即为删除操作,可以删除指定的元素或整个map。erase()方法有多种用法:
void erase(iterator position); size_type erase(const key_type& k); void erase(iterator first, iterator last);
第一种用法是删除迭代器指向的元素,第二种用法是删除与某个键值相等的元素,第三种用法是删除从 first 代表的位置到 last 代表的位置内的所有元素。
二、删除指定元素
假如我们有一个map,其中记录了一组学生的名字和对应的学号。我们需要删除其中学号为"20210001"的学生信息。使用erase方法,可以通过以下方式进行操作:
#include <map> #include <string> using namespace std; int main() { map<string, string> studentMap; studentMap["123456"] = "张三"; studentMap["20210001"] = "李四"; studentMap["20210002"] = "王五"; // 删除学号为"20210001"的学生信息 studentMap.erase("20210001"); // 遍历输出 for (auto iter = studentMap.begin(); iter != studentMap.end(); ++iter) { cout << iter->first << ":" << iter->second << endl; } return 0; }
以上代码中,使用了erase方法删除了学号为"20210001"的学生信息。在遍历时,已经可以看到该元素被成功删除了。
三、删除指定范围内的元素
假设我们需要删除map中前2个元素,可以使用以下代码:
#include <map> #include <string> using namespace std; int main() { map<string, string> studentMap; studentMap["123456"] = "张三"; studentMap["20210001"] = "李四"; studentMap["20210002"] = "王五"; // 删除前两个元素 auto endIter = studentMap.begin(); advance(endIter, 2); studentMap.erase(studentMap.begin(), endIter); // 遍历输出 for (auto iter = studentMap.begin(); iter != studentMap.end(); ++iter) { cout << iter->first << ":" << iter->second << endl; } return 0; }
以上代码中,使用erase方法删除了前两个元素。其中,通过advance函数将迭代器移动到第三个元素的位置,然后将前两个元素删除。在遍历时,可以发现前两个元素已经被成功删除了。
四、删除特定范围内的元素
假设我们需要删除一定范围内的元素,比如"20210001"到"20210002"之间的元素,可以使用以下代码:
#include <map> #include <string> using namespace std; int main() { map<string, string> studentMap; studentMap["123456"] = "张三"; studentMap["20210001"] = "李四"; studentMap["20210002"] = "王五"; studentMap["20210003"] = "赵六"; // 删除键值在"20210001"和"20210002"之间的元素(含"20210001"和"20210002") studentMap.erase(studentMap.lower_bound("20210001"), studentMap.upper_bound("20210002")); // 遍历输出 for (auto iter = studentMap.begin(); iter != studentMap.end(); ++iter) { cout << iter->first << ":" << iter->second << endl; } return 0; }
以上代码中,使用erase方法删除了键值在"20210001"和"20210002"之间的元素。其中,lower_bound和upper_bound函数用于查找键值大于等于"20210001"和键值大于"20210002"的迭代器,即需要删除的范围。在遍历时,可以看到指定范围内的元素已经被成功删除了。