C++ STL map删除键值对:erase()和clear()方法
map 类模板提供了 erase() 和 clear() 成员方法,可用来删除容器中存储的键值对。本节将对这 2 个成员方法做详细的讲解。
erase() 有 3 种适用于不同实际场景需要的语法格式,这也就意味着 erase() 有 3 种用法,分别如下。
1) 可以根据目标键值对位于 map 容器中的位置,实现删除该键值对的目的。erase() 方法的语法格式如下:
2) 除了向 erase() 传入目标键值对位于 map 容器中的位置外,还可以传入目标键值对的键的值,该方法会自行根据指定的键找到目标键值对,并将其删除。erase() 方法的语法格式如下:
举个例子:
3) 在某些实际场景中,可能需要删除某个指定区域内的所有键值对,也可以通过 erase() 方法实现,其语法格式如下:
另外,如果想删除 map 容器中存储的所有键值对,可以使用 clear() 成员方法。该方法的语法格式如下:
下面程序演示了 clear() 的功能:
erase() 有 3 种适用于不同实际场景需要的语法格式,这也就意味着 erase() 有 3 种用法,分别如下。
1) 可以根据目标键值对位于 map 容器中的位置,实现删除该键值对的目的。erase() 方法的语法格式如下:
//删除 map 容器中指定位置的键值对
iterator erase (const_iterator position);
注意,如果删除的键值对位于 map 容器中最后的位置,则该方法返回的迭代器指向的是最后一个键值对之后的位置(等同于 end() 成员方法返回的迭代器)。
下面程序演示了 erase() 成员方法的用法:#include <iostream> #include <map> // map #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 map<std::string, std::string>myMap{ {"C语言教程", "https://www.xinbaoku.com/c/"}, {"Python教程", "https://www.xinbaoku.com/python/"}, {"STL教程", "https://www.xinbaoku.com/stl/"} }; //输出myMap容器存储键值对的个数 cout <<"myMap size = " << myMap.size() << endl; //创建一个指向要删除的键值对的迭代器 map<string, string>::iterator iter = ++myMap.begin(); //执行删除操作 map<string, string>::iterator ret = myMap.erase(iter); //输出当前 myMap 容器中剩余键值对的个数 cout << "new myMap size = " << myMap.size() << endl; //输出 erase() 方法返回的迭代器指向的键值对 cout << ret->first << " " << ret->second << endl; return 0; }程序执行结果为:
myMap size = 3
new myMap size = 2
STL教程 https://www.xinbaoku.com/stl/
2) 除了向 erase() 传入目标键值对位于 map 容器中的位置外,还可以传入目标键值对的键的值,该方法会自行根据指定的键找到目标键值对,并将其删除。erase() 方法的语法格式如下:
//删除 map 容器中键为 k 的键值对
size_type erase (const key_type& k);
举个例子:
#include <iostream> #include <map> // map #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 map<std::string, std::string>myMap{ {"C语言教程", "https://www.xinbaoku.com/c/"}, {"Python教程", "https://www.xinbaoku.com/python/"}, {"STL教程", "https://www.xinbaoku.com/stl/"} }; //输出myMap容器存储键值对的个数 cout <<"myMap size = " << myMap.size() << endl; //删除 myMap 容器键为 "Python教程" 的键值对 int num = myMap.erase("Python教程"); //输出 myMap 容器中剩余键值对的数量 cout << "new myMap size = " << myMap.size() << endl; //输出 erase() 方法的返回值 cout << "num = " << num << endl; return 0; }程序执行结果为:
myMap size = 3
new myMap size = 2
num = 1
3) 在某些实际场景中,可能需要删除某个指定区域内的所有键值对,也可以通过 erase() 方法实现,其语法格式如下:
//删除 map 容器中位于 [first,last) 区域内的所有键值对
iterator erase (const_iterator first, const_iterator last);
举个例子:注意,如果 [fist,last) 范围之后,不再有任何键值对,则 erase() 方法返回的迭代器将指向 map 容器最后一个键值对之后的位置(等同于 end() 成员方法返回的迭代器)。
#include <iostream> #include <map> // map #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 map<std::string, std::string>myMap{ {"C语言教程", "https://www.xinbaoku.com/c/"}, {"Python教程", "https://www.xinbaoku.com/python/"}, {"STL教程", "https://www.xinbaoku.com/stl/"} }; //输出myMap容器存储键值对的个数 cout <<"myMap size = " << myMap.size() << endl; map<string, string>::iterator first = myMap.begin(); map<string, string>::iterator last = --myMap.end(); map<string, string>::iterator ret = myMap.erase(first,last); cout << "new myMap size = " << myMap.size() << endl; cout << ret->first << " " << ret->second << endl; return 0; }程序执行结果为:
myMap size = 3
new myMap size = 1
STL教程 https://www.xinbaoku.com/stl/
注意,[first,last) 为半闭半开区间,这意味着 erase() 方法会从 first 指向的键值对开始删除(包括 first 指向的键值对),一直删到 last 指向键值对的前面那个键值对。
另外,如果想删除 map 容器中存储的所有键值对,可以使用 clear() 成员方法。该方法的语法格式如下:
void clear()
可以看到,该方法不需要传入任何参数,也不需要接收任何返回值。下面程序演示了 clear() 的功能:
#include <iostream> #include <map> // map #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 map<std::string, std::string>myMap{ {"C语言教程", "https://www.xinbaoku.com/c/"}, {"Python教程", "https://www.xinbaoku.com/python/"}, {"STL教程", "https://www.xinbaoku.com/stl/"} }; //输出myMap容器存储键值对的个数 cout <<"myMap size = " << myMap.size() << endl; //清除 myMap 容器中所有的键值对 myMap.clear(); cout << "new myMap size = " << myMap.size() << endl; return 0; }程序执行结果为:
myMap size = 3
new myMap size = 0
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算