hash_set :: upper_bound()如何工作?

时间:2013-01-04 04:01:06

标签: c++ visual-c++ hashset

Visual C ++的stdext::hash_set<T>::upper_bound()如何工作? 散列表如何保持元素排序?!

我试过阅读源代码但是很难破译STL代码......甚至从概念上讲,我无法理解它:哈希表如何比较元素?

2 个答案:

答案 0 :(得分:2)

各种unordered_xxx模板使用哈希函数将对象排序到存储桶中。进入同一个存储桶的对象被分组,以便比较相等的对象是相邻的(其中“比较相等”表示“a < b”为假,b < a为false,或者对于谓词版本,{{ 1}}为false,pr(a,b)为false“)。 pr(b,a)返回一个迭代器,指向与传递的值匹配的第一个对象; lower_bound()返回一个迭代器,它是一个超过最后一个匹配传递值的对象的迭代器。没有全局排序。

答案 1 :(得分:-1)

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

关于它如何比较元素:这就是运营商的用途。只要类型&lt; T&gt;实现'&gt;'操作员可以对其进行排序。你可以写自己的&gt;你的班级的操作员,虽然它必须支持严格的排序(例如,当比较“abc”与“abcdef”时,你必须决定在这种情况下哪一个“更大”。