C stl unordered_map实现,参考有效性

对于std :: map和std :: tr1 :: unordered_map,我从标准中看到:

References to elements in the unordered_map container remain valid in
all cases,even after a rehash.

他们怎么做(实施)?他们是否将所有条目维护为一种链接列表,然后哈希表只存储指向元素的指针?

解决方法

是的,链接列表涉及,尽管不太符合你的建议.

2011年标准说(23.2.5第8段),“无序关联容器的元素被组织成桶,具有相同散列码的密钥出现在同一个桶中.

在每个桶中,元素是链表(每个桶的单独列表,而不是整个容器的一个大列表).当容器被重新堆叠时,元素将被分配给新的桶,但是每个元素的指针保持有效.每个新的存储桶中的链表从指向该存储桶中的现有元素的指针组合起来.

迭代器无效,因为迭代器需要保持指向元素和其桶的指针(所以它可以从一个桶的最后一个元素到下一个的第一个元素).元素指针保持有效,所以现有的指针和对元素的引用仍然有效,但是桶指针被rehash无效,所以迭代器是不可用的.

(这也是为什么无序容器仅支持前向迭代器,而不是由有序关联容器支持的双向迭代器,每个桶的元素都是单链表,所以您不能向后退.)

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...