![](/img/trans.png)
[英]When getting rid of modulo bias how does min = -upper_bound % upper_bound; // work?
[英]How does hash_set::upper_bound() work?
Visual C ++的stdext::hash_set<T>::upper_bound()
工作?
哈希表还如何使元素保持排序?
我已经尝试阅读源代码,但是很难解读STL代码...甚至从概念上讲,我也无法理解它:哈希表如何比较元素?
各种unordered_xxx
模板使用哈希函数将对象分类到存储桶中。 将进入同一存储桶的对象进行分组,以便比较相等的对象相邻(其中“ compare equal”表示“ a < b
为false, b < a
为false,或者对于谓词版本, pr(a,b)
为false,而pr(b,a)
为false”)。 lower_bound()
返回一个迭代器,该迭代器指向与传递的值匹配的第一个对象; upper_bound()
返回一个迭代器,该迭代器在与传递的值匹配的最后一个对象之后。 没有全局排序。
哈希表不需要对元素进行排序; 它只需要比较任何新插入的元素与当前的最高值并相应地进行更新。 无需排序。
关于如何比较元素:这就是运算符的作用。 只要类型<T>实现了'>'运算符,就可以对其进行排序。 您可以为自己的类编写自己的>运算符,尽管它必须支持严格的排序(例如,在将“ abc”与“ abcdef”进行比较时,必须确定哪种情况下“较大”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.