我想从 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 ,只有在搜索过程中使用容器比较器(显然可以自定义)不抛出时,才保证不抛出。
关于C++ STL 按值设置删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765224/