【问题标题】:Hashing pointers as Keys for unordered_map in C++ STL在 C++ STL 中散列指针作为 unordered_map 的键
【发布时间】:2014-09-27 07:05:15
【问题描述】:

我发布了一个类似的quetion,关于在 C++ STL 中使用指针作为映射的键。当用作键时,指针如何在 unordered_maps 中散列。更具体地说,如果我定义:

std::unordered_map< CustomClass*, int > foo;

默认的 C++ std::hash 实现是否可以处理这些指针?使用安全吗?这是好的做法吗?

【问题讨论】:

  • 你的意思可能是 std::unordered_map ,答案实际上是一样的:如果你真的想散列指针(而不是它们指向的对象),你可以使用指针。您也可以实现自己的哈希(或哈希重定向)来处理指向的对象。
  • 是的,我就是这个意思!我已经编辑了帖子以进行更正。谢谢!

标签: c++ hash stl unordered-map


【解决方案1】:

std::hash&lt;T*&gt; 已定义,但其操作方式的细节取决于实现。使用它肯定是安全的,我认为这是一种很好的做法 - 只要它是您需要作为键的指针,而不是对象内容本身。

【讨论】:

  • 为什么指针需要是指向键的指针而不是指向整个对象的指针?如果我希望键是指向对象本身的指针怎么办?
  • @echo 我想你错过了我的意思 - 指针本身就是关键,而不是指针 to 关键。所以两个对象在unordered_map中是分开的,即使key对象的内容是一样的。
  • 啊,好吧,是的,我误解了你原来的评论,但现在用新的上下文重新阅读,我明白你在说什么。似乎在两个不同对象的对象内容可以相同并且对象没有唯一键/标识符的情况下,您可能需要散列对象指针。
  • @echo 我实际上在实际代码中使用过它。如果您有一个传递 void 指针的回调,并且您想在使用该指针之前知道该对象是否仍然存在,您可以在 unordered_set 中查找它。
猜你喜欢
  • 2014-09-27
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2021-03-22
相关资源
最近更新 更多