hash_set::upper_bound()是如何工作的?

How does hash_set::upper_bound() work?

本文关键字:工作 何工作 upper bound hash set      更新时间:2023-10-16

Visual c++的stdext::hash_set<T>::upper_bound()是如何工作的?
哈希表怎么还能保持元素排序?!

我试过阅读源代码,但很难破译STL代码…甚至在概念上,我也搞不懂:哈希表如何比较元素?

各种unordered_xxx模板使用散列函数将对象排序到bucket中。进入同一桶的对象被分组,以便比较相等的对象相邻(其中"比较相等"意味着"a < b为假,b < a为假,或者,对于谓词版本,pr(a,b)为假,pr(b,a)为假")。lower_bound()返回一个迭代器,该迭代器指向第一个与传递值匹配的对象;upper_bound()返回一个迭代器,该迭代器比最后一个与传递值匹配的对象晚1个。不涉及全局排序

哈希表不需要保持元素排序;它只需要将任何新插入的元素与当前的最大值进行比较,并进行相应的更新。不需要排序

至于如何比较元素:这就是操作符的作用。只要输入实现'>'操作符,它可以排序。您可以为您的类编写自己的>操作符,尽管它必须支持严格排序(例如,在比较"abc"answers"abcdef"时,您必须决定在这种情况下哪个更大)。