2011-02-18 99 views
1

std::hash_map不是C++ standard的一部分,但它是標準庫擴展的一部分。例如,它被定義爲VS2005。通常std::hash_map.erase會使所有迭代器失效至std::hash_map?據推測,當元素被移除以優化內存使用時,內存可以被重新分配到更小的陣列。hash_map.erase是否使所有迭代器失效?

那麼hash_map.erase實際上使所有迭代器無效?

+1

值得懷疑的是,擦除元素會觸發散列桶陣列本身使用的內存釋放,因爲調整大小通常非常昂貴。您需要檢查特定編譯器的doco或代碼,或者從VS2005鏈接Leonid發佈,您可以找到記錄的bucket_count()函數 - 只需在散列中插入一百萬個條目,然後擦除它們並在清除之前/之後檢查bucket_count .... – 2011-02-18 14:49:03

回答

2

它看起來是在VS2005示例中指定的文檔中:

每個元素都包含一個單獨的密鑰和一個映射的值。該序列以允許查找,插入和刪除任意元素的方式表示,其中許多操作獨立於序列中元素的數量(恆定時間) - 至少在最好的情況下。此外,插入元素不會使迭代器失效,並且 刪除元素只會使那些指向已刪除元素的迭代器失效。