C++ unordered_set删除元素(erase删除元素)详解
2023-06-13 09:11:55 时间
调用unordered_set容器的成员函数clear()可以删除它的全部元素。成员函数erase()可以删除容器中和传入参数的哈希值相同的元素。另一个版本的erase()函数可以删除迭代器参数指向的元素。例如,这里不需要大费周章地来删除容器中的元素:
std::pair string, string person { John , Smith auto iter = names.find(person); if(iter != std::end(names)) names.erase(iter);
erase() 迭代器的参数必须是一个指向容器中元素的、有效的、可解引用的迭代器,因此需要确保它不是容器的结束迭代器。这个版本的 erase() 函数会返回一个指向被删除元素的下一个位置的迭代器,如果删除的是最后一个元素,那么它就是结束迭代器。
如果 person 对象存在,可以像下面这样很容易地删除它:
auto n = names.erase(person);
这个版本的 erase() 会返回一个 size_t 类型的数作为被删除元素的个数。在这种情况下,这个值只能是 0 或 1,但对于 unordered_multiset 容器来说,这个值可能会大于 1。显然,如果返回值是 0,那么容器中肯定没有这个元素。
尽管最初的示例可能没什么用,但当需要删除一些有特定字符的元素时,可以调用 erase() 来删除迭代器所指向的元素,这是很有用的。假设需要移除 names 容器中名称以字符 S 开始的所有元素,那么下面这个循环就可以实现:
while(true) auto iter = std::find_if(std::begin(names), std::end(names),[](const std::pair string, string pr ){ return pr.second[0] == S }); if(iter == std::end(names)) break; names.erase(iter); }
find_if() 算法的前两个参数定义了一个元素段的范围,它会找到这段元素中第一个可以使第三个参数返回 true 的元素,然后返回这个元素的迭代器。断言的参数必须是从解引用元素段得到的类型对象。这里的元素段是 names 容器中的全部元素,它们都是 pair string, string 对象,断言是一个 lambda 表达式,当 pair 的第二个成员的首字母是 S 时。当没有元素使 lambda 返回 true 时,算法会返回这段元素的结束迭代器。
这里有另一个版本的 erase(),它可以移除一段元素。下面的语句可以移除除了第一个和最后一个元素之外的所有元素:
auto iter = names.erase(++std::begin(names),--std::end(names));
这个函数的参数是两个迭代器,它们指定了所删除元素的范围。这个函数会返回一个迭代器,它指向最后一个被删除元素后面的元素。
21762.html
相关文章
- C++中set用法详解
- 建议收藏!C++ set用法大全
- c++语言截取字符串,详解C++ string常用截取字符串方法
- java set 排序的_Set集合排序
- C++递归和迭代的区别,并举例说明[通俗易懂]
- C++ vector的初始化「建议收藏」
- C/C++ 获取操作系统版本
- C++:map和set的认识和简单使用/关联式容器
- C++ STL学习之容器set和multiset (补充材料)详解编程语言
- Web QQ 协议 登录加密算法 —— VC++实现详解编程语言
- C++ set,STL set详解
- C++ set添加、删除和访问(STL set添加、删除和访问)元素详解
- C++ set保存指针(智能指针)详解
- C++ unordered_set定义及初始化详解
- C++ unordered_set插入元素(insert插入元素)详解
- 赋值运算符重载(C++实现)详解
- MySQL中SET集合的使用方法及注意事项(mysql中set集合)
- MySQL中如何设置变量使用SET语句(mysql 中set变量)
- 深入浅出Redis集群Set的简单操作(redis集群set过程)
- 发现奥秘Redis遍历Set集合(redis遍历set集合)
- Oracle SET日期 驾驭时间,管理数据(oracle set日期)
- Oracle Set命令调整你的参数配置(oracle set命令)
- 利用Oracle Set 快速进行判断(oracle set判断)
- 从Redis中获取Set集合的简单方法(redis获取set集合)
- C++基础入门教程(三):数组、字符串、结构体、共用体