【问题标题】:Hash Tables Stay Sorted?哈希表保持排序?
【发布时间】:2015-02-21 05:00:11
【问题描述】:

我的问题不是问你是否可以对预先存在的哈希表进行排序,而是如果我可以的话,正确索引的键会保持排序吗?

例如,如果我需要一个人的哈希表,我在其中对他们的出生年份进行哈希处理,并且我希望最小的总是低于最大的。如果我进行二次探索以重新散列,它仍然会有最年轻的在最年长的之下。这听起来合乎逻辑,但在什么情况下会中断?

tl;dr 如果我有哈希表对订单索引的键进行哈希处理,即使在重新哈希处理期间它们也会保持排序状态吗?

【问题讨论】:

  • 您的问题很难阅读......而且,您所问的似乎取决于具体的哈希表实现。你问的是一种特定的语言吗?如果有,请添加相关标签。
  • 我用 C++ 编写,但这只是一个数据结构问题。我不是在问如何制作一个或任何关于哈希表的性质的东西。
  • 基本上,如果我的哈希函数是按从老到老的,那么它基本上是排序的吗?它会保持按二次探测实现排序吗?
  • 一般来说,哈希表只是将键映射到值,它存储键/值对的顺序是特定于实现的。例如,Java HashMap 说“这个类不保证映射的顺序;特别是,它不保证顺序会随着时间的推移保持不变。”
  • 它们不会“保持”排序,因为它们从一开始就没有排序。

标签: data-structures hash hashtable


【解决方案1】:

根据您的评论,我得出的结论是您的问题与 C++ 有关。 C++ 中的哈希表实现是 STL 的一部分。它们是 std::unordered_map/unordered_multimap 和 std::unordered_set/unordered_multiset。

如果您更喜欢从数据结构中获取排序输出,调用应该转到 std:map/multimap 或 std::set/multiset。请注意这里的实现不是哈希表,而是使用二叉树作为基本数据结构。

【讨论】:

  • 哈哈,所以我没有使用 STL im 使用 Weiss 的二次探测哈希表实现,他使用向量实现(在我的脑海中几乎是一个花哨的数组)这是我自己的知识但这有助于了解它的实现依赖。
猜你喜欢
  • 2023-03-27
  • 2020-04-17
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2010-11-28
  • 2010-10-20
  • 2012-12-21
  • 2011-07-07
相关资源
最近更新 更多