我可以(可移植)访问C++标准库的哈希实现吗?
Can I get (portable) access to the C++ standard library's hash implementation?
GNU C++标准库有:
struct _Hash_impl
{
static size_t
hash(const void* __ptr, size_t __clength,
size_t __seed = static_cast<size_t>(0xc70f6907UL))
{ return _Hash_bytes(__ptr, __clength, __seed); }
/* etc. */
}
作为其实现的一部分(例如,这就是它在字符串上使用的内容)。现在,我也想使用该代码...我如何以可移植的方式访问它(例如,以与 Clang 的 libc++ 一起使用的方式)?
No.您无法以可移植的方式访问编译器的内部实现详细信息。这怎么可能呢?
您甚至无法确定在同一编译器供应商的下一次编译器更新后,实现是否仍然存在。或者更糟糕的是,它可能仍然可以很好地编译,但具有不同的运行时行为。这是一场可维护性的噩梦,也是等待发生的无休止的调试会话。
如果您将来需要可移植性或向后兼容性,请实现自己的哈希函数并模仿_Hash_impl
的行为。
我一直
在想,也许我可以在不实际这样做的情况下获得无聊的实现效果。我还没有实现这个,但我相信它应该可以工作:
- 编写不允许重新分配的自定义分配器
my_allocator
- 我们现在可以使用类
std::vector<char, my_allocator>
,它用各种std::vector
包装原始缓冲区。 - 给定
void* buf
和大小(以字节为单位n
),我们实例化一个包装向量:std::vector<int, my_allocator<int>> vec(n, {}, buf);
- 现在
std::hash(vec)
FTW!
感谢@hvd去年指导我这个包装技巧。
相关文章:
- 如何为位集找到/实现一个好的哈希函数
- C++哈希表中,两个相同的实现,但一个给出错误
- 哈希映射如何在 c++ 中实现?
- 使用哈希表设置实现
- 为自定义类C++实现哈希
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 如何在这个哈希映射中实现 AVL 树
- 如何为模板类实现std ::哈希
- 在哪里实现哈希函数
- 实现将字符串映射到 C++ 中的数组的哈希表。我一直在"Debug Assertion Failed",我不知道为什么
- 如果我们使用链表数组来实现哈希表,则可以以不需要遍历的方式实现"add"。这是真的还是假的?
- 使用链哈希实现动态哈希表
- 在C++中实现哈希表(插入和延迟删除)
- 如何用tbb实现一个将键映射到不同类型值的并发哈希表
- 我可以(可移植)访问C++标准库的哈希实现吗?
- **在这个简单的哈希实现中做了什么?
- c++河豚哈希实现
- 我如何编程一个双哈希实现意味着字符串