【问题标题】:C++ std::hash_map: What is the key's roleC++ std::hash_map:密钥的作用是什么
【发布时间】:2013-03-13 21:03:33
【问题描述】:

mapshash_maps 都被设计为保持 pairs<key, data>。我很清楚为什么地图应该有一个用于排序的键(更准确地说:树),但我不明白为什么 hash_maps 需要一个键,为什么不能单独对它的数据进行散列并放入哈希表中?

我在文档中或通过网络搜索都找不到答案。

【问题讨论】:

  • en.wikipedia.org/wiki/Hash_table 没有回答您的问题?
  • 那么在地图中,为什么不能单独将数据用于排序(或树)?在这两种情况下,被建模的概念都是字典的概念,这就是为什么要拆分为键和关联数据的原因,因为这是一个有用的想法,而不是出于任何实现原因。如果您不需要密钥,那么您正在对集合进行建模,并且您将使用 std::set 或 set::unordered_set。
  • 地图没有树的键。地图拥有一个键,因为它是一个地图。它将键映射到值。树状结构与实现有关。

标签: c++ hashmap key std


【解决方案1】:

您正在寻找set,其中的键也是数据。

C++ 提供了一些不同的风格:setunordered_set 等...

【讨论】:

    【解决方案2】:

    std::unordered_set 完全按照您描述的方式工作。但是,有时您想从一个数据映射到另一个数据;这就是std::unordered_map 发挥作用的地方。

    【讨论】:

      【解决方案3】:

      走到橱柜前。拿出电话簿,查一个号码。它具有名称和数字之间的映射

      【讨论】:

      • Like :) 但是接受的答案已经被 Alex 接受了。
      【解决方案4】:

      哈希映射也称为Unordered Map 使用HASHKEY 作为桶或插槽的index。换句话说,任何哈希表都需要一个哈希函数来计算一个index 成一个桶或槽的数组,从中可以找到正确的值。这些index是哈希表的键,在最佳情况下用于在O(1)时间内访问数据。

      【讨论】:

      • 恐怕你错了,key是hash_map的pair类型结构的一部分,hash是hash函数的结果,是两个不同的东西。
      【解决方案5】:

      如果你想使用数据本身作为key,合适的容器是std::setstd::unordered_set。一个map同时拥有一个key和一个value; std::mapstd::unordered_map 之间的区别在于如何组织数据; std::map 按键排序,std::unordered_map 按键散列。

      【讨论】:

        猜你喜欢
        • 2011-01-17
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 2021-12-25
        • 1970-01-01
        相关资源
        最近更新 更多