我想从std::set
中删除一个元素。
我知道最好的直接方法是使用set<T>::find(T val)
方法检查其在集合中的存在,然后使用返回的set<T>::iterator
删除它。但我希望使用按值擦除的速记方法。
尽管std::set
确实通过重载函数set<T>::erase(T val)
提供了按here列出的值进行擦除的功能,但我无法找到如果该值不存在于集合中会发生什么。
正如人们的直觉期望,如果参数值不存在于集合中,它是否会[[不执行任何操作?是否保证不会抛出任何错误/异常?
std::set
遵守26.2.6 associative.reqmts的关联容器要求。 它返回实际已删除元素的数量,对于std::set
,其数量必须为零或一,具体取决于存在情况。对于26.2.6.1 associative.reqmts.except,只有在搜索过程中使用容器比较器(显然可以自定义)时才保证不抛出异常。
((1)无效擦除(迭代器位置);((2)size_type擦除(const value_type&val);
((3)无效擦除(迭代器在先,迭代器在后);
返回值
对于基于值的版本(2),该函数返回已擦除的元素数。成员类型size_type是无符号整数类型