当我们试图从hash_set中擦除不存在的键时会发生什么?
What happens when we try to erase non existent key from hash_set
当我们试图从SGI的STL中删除hash_set
类中不存在的键时会发生什么?对hash_set::erase
的调用是否首先尝试找到密钥然后删除它?
这是您实现hash_set
所使用的代码,它是hashtable
的擦除方法:
template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::size_type
hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::erase(const key_type& __key)
{
const size_type __n = _M_bkt_num_key(__key);
_Node* __first = _M_buckets[__n];
size_type __erased = 0;
if (__first) {
_Node* __cur = __first;
_Node* __next = __cur->_M_next;
while (__next) {
if (_M_equals(_M_get_key(__next->_M_val), __key)) {
__cur->_M_next = __next->_M_next;
_M_delete_node(__next);
__next = __cur->_M_next;
++__erased;
--_M_num_elements;
}
else {
__cur = __next;
__next = __cur->_M_next;
}
}
if (_M_equals(_M_get_key(__first->_M_val), __key)) {
_M_buckets[__n] = __first->_M_next;
_M_delete_node(__first);
++__erased;
--_M_num_elements;
}
}
return __erased;
}
如您所见,它在删除节点之前尝试查找密钥,如果密钥不存在, 什么也不做。
同样,来自SGI文档:
Erase key:销毁键值与k相同的所有元素从a中移除它们。返回值是元素的个数即a.c recount (k)的旧值。
相关文章:
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- g++ 说函数不存在,即使包含正确的标头
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 查找第一个数组中不存在的元素
- 查找不存在的键时,unordered_map返回什么
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- set::find 查找不存在的元素
- 有没有办法将字符串添加到 Vector 中,但前提是它尚不存在?->C++
- inet_ntop返回不存在的地址
- CPP 使用不存在的键访问映射
- 我应该使用什么函数签名来返回对可能不存在的对象的引用
- 如果我在键不存在的情况下读取地图的值,会发生什么情况?
- 我想在 c++ 中为 map<> 的给定键返回一个值。如果 KEY 在 map<> 中不存在,要返回什么?
- C++当"extern int * name"引用不存在的变量,然后访问"name"时会发生什么
- 当我们试图从hash_set中擦除不存在的键时会发生什么?
- 当为不存在的日期/时间设置CreateWaitableTimer时会发生什么?
- 对象寿命相关;下面的问题不存在一个术语/模式什么的吗
- 如果在std::map中操作不存在的键值对会发生什么?