如何解决Google的density_hash_map在set_empty_key函数中崩溃
|| 我正在尝试使用Google density_hash_map而不是std:map来存储键值数据。 当我使用(int,int)对进行测试时,我设置了set_empty_key(mymap,-2)并成功了。 但是,现在,当我将其与(哈希,值)对一起使用时,我将设置set_empty_key(mymap -2)或set_empty_key(mymap,some_random_hash),在两种情况下,我的程序都会在set_empty_key();中崩溃。 有人可以指导我吗?如何解决此崩溃? 谢谢。解决方法
我不知道您崩溃的确切原因,但是根据您的描述,我至少看到了两个潜在的错误。
第一。检查
key_type
和data_type
类型都是POD类型,并且不包含指向其自身的指针。更具体地说(原始):
key_type和data_type都必须为
普通的旧数据。另外,应该
没有指向的数据结构
直接分为关键或价值部分,
包括键或值本身(对于
例如,您不能有类似的值
结构{int a = 1,* b =&a}。这是
因为density_hash_map使用malloc()
和free()为
键和值,以及memmove()
重新组织关键和价值
记忆。
第二。关于使用density_hash_map。您需要设置一些特殊的“空”键值,该键值永远不会用于存储在集合中的真实元素。此外,如果要使用erase()
,则需要为删除的项目指定特殊键,而该键也永远不会用作实际存储项目的键。
这是完美的描述:
density_hash_map需要您致电
set_empty_key()之后
构造哈希图,以及之前
调用任何其他density_hash_map
方法。 (这是最大的
density_hash_map之间的区别
API和其他哈希映射API。看到
Implementation.html为什么会这样
必要。)
set_empty_key()应该是键值
从不用于合法
哈希映射条目。如果没有
键值,您将无法使用
density_hash_map。打电话是错误的
insert()带有键为
\“空密钥。\”
需要您调用set_deleted_key()
在调用Ease()之前。争论
set_deleted_key()应该是
从未用于的键值
合法的哈希映射条目。它必须
与使用的键值不同
对于set_empty_key()。这是一个错误
无需先调用即可调用擦除()
set_deleted_key(),它也是
调用带有项目的insert()时出错
其键为“已删除键”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。