qt删除键值_C++ STL map删除键值对:erase()和clear()方法

本文详细介绍了C++ STL中map的erase()和clear()方法,用于删除键值对。erase()方法有三种用法:按位置删除、按键值删除和按范围删除,而clear()方法则用于清空整个map容器。通过实例展示了这些方法的使用方法和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

map 类模板提供了 erase() 和 clear() 成员方法,可用来删除容器中存储的键值对。本节将对这 2 个成员方法做详细的讲解。

erase() 有 3 种适用于不同实际场景需要的语法格式,这也就意味着 erase() 有 3 种用法,分别如下。

1) 可以根据目标键值对位于 map 容器中的位置,实现删除该键值对的目的。erase() 方法的语法格式如下:

//删除 map 容器中指定位置的键值对

iterator erase (const_iterator position);

其中,position 为迭代器,指向要删除的键值对。同时该方法会返回一个 iterator 迭代器,其指向的是删除键值对之后的那个键值对。

注意,如果删除的键值对位于 map 容器中最后的位置,则该方法返回的迭代器指向的是最后一个键值对之后的位置(等同于 end() 成员方法返回的迭代器)。

下面程序演示了 erase() 成员方法的用法:

#include

#include // map

#include // string

using namespace std;

int main() {

//创建并初始化 map 容器

map<:string std::string>myMap{ {"C语言教程", "http://c.biancheng.net/c/"},

{"Python教程", "http://c.biancheng.net/python/"},

{"STL教程", "http://c.biancheng.net/stl/"} };

//输出myMap容器存储键值对的个数

cout <

//创建一个指向要删除的键值对的迭代器

map::iterator iter = ++myMap.begin();

//执行删除操作

map::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教程 http://c.biancheng.net/stl/

此程序中,要删除的键值对是位于 myMap 容器中第 2 个位置的键值对,当使用 erase() 方法执行删除操作之后,该方法返回的迭代器指向的是第 3 个键值对。

2) 除了向 erase() 传入目标键值对位于 map 容器中的位置外,还可以传入目标键值对的键的值,该方法会自行根据指定的键找到目标键值对,并将其删除。erase() 方法的语法格式如下:

//删除 map 容器中键为 k 的键值对

size_type erase (const key_type& k);

其中,参数 k 为要删除键值对的键的值,该方法的返回值为成功删除的键值对的个数。

举个例子:

#include

#include // map

#include // string

using namespace std;

int main() {

//创建并初始化 map 容器

map<:string std::string>myMap{ {"C语言教程", "http://c.biancheng.net/c/"},

{"Python教程", "http://c.biancheng.net/python/"},

{"STL教程", "http://c.biancheng.net/stl/"} };

//输出myMap容器存储键值对的个数

cout <

//删除 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

显然,通过执行第 14 行代码,成功删除了 myMap 容器中键为 "Python教程" 的键值对。值得一提的是,由于 map 容器中每个键值对的键都是独一无二的,因此使用该语法格式的 erase() 方法,其返回值最大为 1。

3) 在某些实际场景中,可能需要删除某个指定区域内的所有键值对,也可以通过 erase() 方法实现,其语法格式如下:

//删除 map 容器中位于 [first,last) 区域内的所有键值对

iterator erase (const_iterator first, const_iterator last);

其中,参数 first 和 last 都是迭代器,它们的组合 [first, last) 就表示 map 容器中的某个范围,该方法会删除此范围内的所有键值对,并返回一个迭代器,其指向删除范围之后的第一个键值对。

注意,如果 [fist,last) 范围之后,不再有任何键值对,则 erase() 方法返回的迭代器将指向 map 容器最后一个键值对之后的位置(等同于 end() 成员方法返回的迭代器)。

举个例子:

#include

#include // map

#include // string

using namespace std;

int main() {

//创建并初始化 map 容器

map<:string std::string>myMap{ {"C语言教程", "http://c.biancheng.net/c/"},

{"Python教程", "http://c.biancheng.net/python/"},

{"STL教程", "http://c.biancheng.net/stl/"} };

//输出myMap容器存储键值对的个数

cout <

map::iterator first = myMap.begin();

map::iterator last = --myMap.end();

map::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教程 http://c.biancheng.net/stl/

程序中,first 迭代器指向的是 myMap 容器中第一个键值对,last 迭代器指向的是 myMap 容器中最后一个键值对,通过调用 erase() 方法可以删除 [first,last) 范围内所有的键值对。

注意,[first,last) 为半闭半开区间,这意味着 erase() 方法会从 first 指向的键值对开始删除(包括 first 指向的键值对),一直删到 last 指向键值对的前面那个键值对。

另外,如果想删除 map 容器中存储的所有键值对,可以使用 clear() 成员方法。该方法的语法格式如下:

void clear()

可以看到,该方法不需要传入任何参数,也不需要接收任何返回值。

下面程序演示了 clear() 的功能:

#include

#include // map

#include // string

using namespace std;

int main() {

//创建并初始化 map 容器

map<:string std::string>myMap{ {"C语言教程", "http://c.biancheng.net/c/"},

{"Python教程", "http://c.biancheng.net/python/"},

{"STL教程", "http://c.biancheng.net/stl/"} };

//输出myMap容器存储键值对的个数

cout <

//清除 myMap 容器中所有的键值对

myMap.clear();

cout << "new myMap size = " << myMap.size() << endl;

return 0;

}

程序执行结果为:

myMap size = 3

new myMap size = 0

从输出结果中可以看到,未调用 clear() 方法之前,myMap 容器中存有 3 个键值对,而调用 clear() 方法后,myMap 容器就变成了空 map 容器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值