C++ STL 设置按值擦除

C++ STL Set Erase by Value

本文关键字:擦除 设置 STL C++      更新时间:2023-10-16

我想从std::set中删除一个元素。

我知道最好和直接的做法是使用set<T>::find(T val)方法检查它在集合中的存在,然后使用返回的set<T>::iterator擦除它。但我希望使用按值擦除的速记方法。

尽管std::set确实提供了通过重载函数set<T>::erase(T val)按此处列出的值擦除的功能,但我找不到如果集合中不存在该值会发生什么。

正如人们直观地期望的那样,如果集合中不存在参数值,它是否什么都不做?是否保证它不会引发任何错误/异常?

std::set

遵守26.2.6 associaciative.reqmts 的关联容器要求。

它返回实际擦除元素的数量,对于std::set,这些元素必须为零或 1,具体取决于是否存在。根据 26.2.6.1 associaciative.reqmts.except,只有在容器比较器(显然可以自定义(在搜索期间使用时不抛出时才保证不会抛出。

来自 cplusplus

(

1(空隙擦除(迭代器位置(;

(2( size_type擦除(const value_type& val(;

(3(空隙擦除(迭代器在前,迭代器后(;

返回值

对于基于值的版本 (2(,该函数返回擦除的元素数。

成员类型 size_type 是无符号整型


因此,如果未擦除任何元素,则返回 0。