学到这里,我们已经掌握unordered_map容器的基本知识了,增、改、查,但还没有学过删。本节将继续带领读者一起学习如何为unordered_map容器删除元素。

erase()是删除unordered_map容器内元素的主要函数,这里通过代码简单介绍如何通过erase()删除元素:

#include<iomanip>
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
/*erase()删除unordered_map内元素*/ 
void test()
{
 unordered_map<string,string> ump{
{"C语言网","dotcpp.com"},
{"数据结构教程","https://www.dotcpp.com/course/ds/"},
{"C++教程","https://www.dotcpp.com/course/cpp/"},
{"Python教程","https://www.dotcpp.com/course/python/"},
{"Java教程","https://www.dotcpp.com/course/java/"}};
cout << "总共有5个k-v元素: \n";
for(auto it = ump.begin();it!=ump.end();++it)cout << "key=" <<setw(15)<< left <<  it->first << "value=" << it->second << '\n';
cout << '\n' ;
 
/*erase(pos)参数为位置迭代器pos,删除其指向的key */
ump.erase(ump.begin()) ;
cout << "删除ump的第一个元素: \n";
for(auto it = ump.begin();it!=ump.end();++it)cout << "key=" <<setw(15)<< left <<  it->first << "value=" << it->second << '\n';
cout << '\n' ;
 
/*erase(key)参数key,删除其指向的key */
ump.erase("Java教程");
cout << "删除指定key=Java教程: \n";
for(auto it = ump.begin();it!=ump.end();++it)cout << "key=" <<setw(15)<< left <<  it->first << "value=" << it->second << '\n';
cout << '\n' ;
 
/*erase(first,last)删除区间[first,last)的元素*/
/*unordered_map是正向迭代器,只能++不能--*/
 unordered_map<string,string>::iterator end = ump.begin() ;
 for(int i=0;i<ump.size()-1;++i)++end;
ump.erase(ump.begin(),end) ;
cout << "删除除最后一个元素外的所有元素: \n";
for(auto it = ump.begin();it!=ump.end();++it)cout << "key=" <<setw(15)<< left <<  it->first << "value=" << it->second << '\n';
cout << '\n' ;
 
/*clear()*/
ump.clear();
cout << "全部清除后有元素:【"  << ump.size() << "】个\n";
}
int main() {
    test();
    return 0;
}

编译结果如下:

erase()和clear()

通过erase()成功删除指定元素,clear()清空元素。

总结:通过erase()为unordered_map容器删除元素:单个元素清除时参数为位置迭代器或key;多个元素删除时用到区间删除,参数为两个位置迭代器。一键全清用到clear()。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)