C ++ STL按值设置擦除

问题描述 投票:3回答:2

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

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

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

正如人们的直觉期望,如果参数值不存在于集合中,它是否会[[不执行任何操作?是否保证不会抛出任何错误/异常?

c++ stl set
2个回答
6
投票
std::set遵守26.2.6 associative.reqmts的关联容器要求。

它返回实际已删除元素的数量,对于std::set,其数量必须为零或一,具体取决于存在情况。对于26.2.6.1 associative.reqmts.except,只有在搜索过程中使用容器比较器(显然可以自定义)时才保证不抛出异常。


3
投票
来自cplusplus

((1)无效擦除(迭代器位置);

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

((3)无效擦除(迭代器在先,迭代器在后);

返回值

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

成员类型size_type是无符号整数类型


因此,如果没有删除任何元素,它将返回0。
© www.soinside.com 2019 - 2024. All rights reserved.