C ++:指针作为哈希表中的键

Posted

技术标签:

【中文标题】C ++:指针作为哈希表中的键【英文标题】:C++: Pointer as a key in a hashtable 【发布时间】:2011-06-10 10:08:14 【问题描述】:

在程序运行期间使用指针作为哈希表键有什么问题吗? (无需存储到磁盘并稍后使用,因为这会导致明显的问题)

在很多情况下,我需要快速知道一个对象是否属于某个对象管理器。检查它的一种快速方法是将对象管理器中的每个对象存储在哈希表中,其中对象的指针是实际对象的键:例如,哈希表

【问题讨论】:

【参考方案1】:

它应该工作得很好。你看有什么问题吗?也许你应该试试看。 :)

【讨论】:

【参考方案2】:

不,没有问题。这就像存储一个int

指针有一个不变的值并且唯一地标识一个资源。

如果你没有很好地使用你的指针,当然会有问题,但这是另一个不相关的事情。

【讨论】:

事实上,指针比std::string 更安全,因为它们是可变的。 boost::hashstd::tr1::hash 被明确设计为使用指针。不过,内存管理可能会变得复杂。 我看到的唯一问题是对齐。所有指针值都将指向相同类型的值,因此所有指针值都将是它的倍数。这意味着如果对齐为 2,则哈希函数是恒等函数,并且重新哈希策略是加倍,所有奇数位置都将不被使用。最大的结盟就是最大的问题。如果指向类型的对齐方式为 8,则仅使用 8 的倍数的位置。【参考方案3】:

在我的脑海中 - 如果你的哈希表指向的内存空间在没有首先删除你的指针指向的内存空间的引用的情况下被释放,就会有内存泄漏。

【讨论】:

以上是关于C ++:指针作为哈希表中的键的主要内容,如果未能解决你的问题,请参考以下文章

c++ 哈希表中,可不可以使用自己定义的数据类型(如list)作为key?

141. 环形链表简单哈希双指针

141. 环形链表简单哈希双指针

C中哈希表程序中的指针问题

C中的通用哈希表

哈希表