我需要为散列表提供插入/查找/删除接口。我只写了散列表来提供内部存储桶/入口管理。散列函数应该从外部提供。我现在坚持如何公开接口,以便哈希表可以处理字节数组以及固定长度的数据类型。问题在于,对于字节数组,哈希函数需要知道数组的长度,而对于其他类型,它可以没有这些信息。我的问题是我不能为字节数组实现operator[]
,因为散列函数需要两个参数。我想保持operator[]
。有没有什么办法解决这个问题(没有专注于T*
,并在该专业化中抛出编译器错误operator[]
)?关于模板专业化
Q
关于模板专业化
2
A
回答
1
我在这里感到困惑,因为我没有得到散列表上的operator []与存储在其中的数据类型的operator []冲突。
如果你的hash_table有operator [],它可能是你为key []提供密钥的hash_map,也可能是那个operator []返回一个单元格的内容。
通常,如果我确实实现了自己的散列表,我并不直接将数据存储在条目中,而是将数据加上一些“元数据”,即与单元有关的信息。由于你的散列表支持删除,所以你需要确保你仍然可以达到可能被移动到别处的任何冲突,无论你现在的策略是寻找这样一个单元。因此,删除的单元格可用,但与从未占用过的单元格有不同的含义,因为它可能是碰撞过程中路径的一部分。如你所说,散列函数是独立的。它独立于存储机制,并且根本不调用哈希表的operator []。
散列表仅使用散列函数和比较函数,否则使用其自己的存储策略和冲突处理策略。
0
可以处理字节数组以及固定长度的数据类型
所以,你的字节数组的大小而变化。你需要记录每个地方的长度。如果你想通过值将它们存储在哈希表中,那么你可以将数据和长度值打包在一个对象中:STL已经提供了一些类适用于这个类,包括std :: vector和std :: string < >。或者,如果您只希望哈希表存储指向您的字节数组的指针/引用,则可以创建一个普通的“句柄”类,它可以存储或知道在哪里查找长度,并且具有指向/指向数据的指针/引用。
正如“CashCow”指出的,字节数组上的operator[]
与散列表上的operator[]
之间没有固有冲突......如果需要,它们甚至可以链接在一起。
相关问题
- 1. 模板专业化模板
- 2. 模板专业化
- 3. 模板专业化
- 4. 模板专业化
- 5. 模板专业化
- 6. 模板专业化
- 7. 模板专业化
- 8. 模板专业化
- 9. 查询C++模板专业化和部分模板专业化
- 10. 模板作为专业化
- 11. 模板专业化帮助
- 12. 模板专业化问题
- 13. 模板专业化和C++
- 14. 专业化模板函数
- 15. 模板类专业化
- 16. 模板专业化需要
- 17. 模板专业化问题
- 18. C++模板专业化
- 19. 总模板专业化
- 20. 模板专业化C++ 98
- 21. 模板专业化参数
- 22. 成员模板专业化
- 23. 暧昧模板专业化
- 24. 模板类专业化
- 25. 模板专业化别名
- 26. 模板半专业化
- 27. 模板专业化优先
- 28. 模板专业化实现
- 29. 模板专业化与类
- 30. typedef和模板专业化
+1。我猜哈希表不应该知道密钥的字节布局。我将为字节数组键实现一个包装类。 – nakiya 2011-01-19 09:56:03