當我們試圖從類中刪除不存在的密鑰時,會發生什麼?SGI's STL? 撥打hash_set::erase
是否首先嚐試查找密鑰然後刪除它?當我們試圖從hash_set中刪除不存在的密鑰時會發生什麼
回答
這裏是您實現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 documentation:
擦除鍵:銷燬其鍵是爲k相同的所有元件,並且 從刪除它們。返回值是被擦除的元素 的數量,即a.count(k)的舊值。
而且,如果找不到密鑰,「沒有」,更重要的是。 – 2013-05-03 08:29:30
所以我不需要檢查包含()擦除之前的密鑰? – user1393608 2013-05-03 08:29:56
@ user1393608,因爲在文檔中指定了這種行爲,這似乎是多餘的。 – zakinster 2013-05-03 08:35:07
- 1. 當我在html中刪除doctype時會發生什麼?
- 2. 當我從地圖中刪除條目時,map :: iterator會發生什麼?
- 3. 當我們在JavaScript中聲明Array(4)時會發生什麼?
- 4. 當我刪除一列時Oracle會發生什麼?
- 5. 在PHP中,當我們使用mysql_query時,會在內存中發生什麼
- 6. 爲什麼從密鑰中刪除密鑰,將密鑰從另一個密碼中刪除?
- 7. 什麼是H.450.2?當它不存在時會發生什麼?
- 8. 如果我從我的GitHub帳戶中刪除GPG密鑰,會發生什麼情況?
- 9. 當我們在int數組中存儲非整數時會發生什麼?
- 10. 當我刪除Jtextfield中的文本時,lostFocusEvent不會發生?
- 11. 當我們使用錯誤的notify()時會發生什麼?
- 12. 當我輸入錯誤的密碼時會發生什麼?
- 13. 當試圖從ArrayList中刪除對象時發生崩潰
- 14. 爲什麼Google會刪除我的Google Map Javascript API密鑰?
- 15. 當我刪除它們所在的虛擬環境時,我的下載會發生什麼?
- 16. 爲什麼我們需要觸發從視圖中刪除?
- 17. 當從mysql中刪除數據時,它佔用的空間會發生什麼?
- 18. 當我ping 127.0.0.1時會發生什麼
- 19. 當我編譯時會發生什麼?
- 20. 如果我不小心刪除了Cloud KMS中的密鑰,會發生什麼情況?
- 21. 當我們結合RAII和GOTO時會發生什麼?
- 22. 當我們做networkstream.write()時會發生什麼?
- 23. 當我們創建System.DirectoryServices.DirectoryEntry實例時,幕後會發生什麼?
- 24. 當我們使用updatepanel時會發生什麼?
- 25. java當我們刷新IO流時會發生什麼
- 26. 當我們調用ServiceWorkerRegistration.pushManager.subscribe()時會發生什麼?
- 27. 當我們調用$(document).ready()時,會發生什麼?
- 28. 當我們打開嵌入式主板時會發生什麼?
- 29. 當我們任意使用==時會發生什麼?
- 30. 當我們重新加載Elixir模塊時會發生什麼?
實際上取決於數據結構。你在說什麼'hash_set'?標準庫中沒有該類名稱。 – Angew 2013-05-03 08:20:03
什麼是'hash_set'?標準庫中沒有這樣的東西。 – 2013-05-03 08:20:43
您是否在談論C++哈希集的實現:http://www.sgi.com/tech/stl/hash_set.html? – zakinster 2013-05-03 08:23:25