2011-02-18 98 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示例中指定的文档中:

每个元素都包含一个单独的密钥和一个映射的值。该序列以允许查找,插入和删除任意元素的方式表示,其中许多操作独立于序列中元素的数量(恒定时间) - 至少在最好的情况下。此外,插入元素不会使迭代器失效,并且 删除元素只会使那些指向已删除元素的迭代器失效。