[英]How is iterating through a hashtable implemented?
我试图了解如何迭代实现的哈希表。 我无法想象它。 我对这种迭代的速度特别感兴趣。 例如:
QHash<int, std::string> hashTable;
...
for (auto it = hashTable.begin(); it != hashTable.end(); ++it)
std::cout << it.value() << std::endl;
这是一个O(hashTable.size())
操作吗?
我试图挖掘源代码,但找不到合适的定义。
散列表的一些实现还维护所有条目的链表以允许快速迭代(所谓的“链接散列映射”)。
当他们不这样做时,唯一的方法是迭代哈希表的所有桶,同时迭代每个桶中的元素。
此操作的速度取决于表的填充状态。 当它非常低时,需要迭代很多空桶,这浪费时间。 当表填充良好,并且每个桶中有一个或多个元素时,它几乎就像迭代链表一样。 在一个完美的哈希映射中,每个桶只包含一个元素,就像迭代一个数组一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.