boost_unordered的哈希函数,没有默认值可能吗?

时间:2010-11-26 16:10:17

标签: c++ boost hash

我有一个有list of items的类(一个名为ItemList的类的实例)。 此ItemList类具有以下功能:

ItemIndexType AddItem(...);
void DoSomething(ItemIndexType index, ...);

ItemIndexType充当某种“智能迭代器”,并具有成员变量
myIter (iterator to a multimap in the ItemList)
myList (pointer to the ItemList)
还有一些用于管家 这很聪明,因为如果我要从ItemList中删除一个项目,所有指向该项目的索引都将被清除。 (指向地图的末尾)。

它现在按预期工作,我宁愿不再改变太多了。但是对于应用程序,我需要做一些额外的事情:我正在构建一个“重置”功能:

void ResetItem(ItemIndexType ind);

然后,此函数将“重置”项目ind指向原始值。我不想在项目类中存储orignal值,所以我决定创建一个容器,它将具有作为关键字的itemindex和value作为构造项目的原始参数。

由于不仅不需要订购,也不可能,我认为boost :: unordered是可行的方法。
更改deque我曾经跟踪哈希表的索引产生了一个奇怪的错误:

  

X \ boost \ functional \ hash \ extensions.hpp(176):错误C2665:'boost :: hash_value':16个重载中没有一个可以转换所有参数类型

列表由以下人员创建:

typedef boost::unordered_map<ItemIndexType, ListDataType> ListContType;

如何为自定义数据类型创建哈希函数?

1 个答案:

答案 0 :(得分:2)

您的密钥数据类型需要等式谓词和哈希函数,请参阅Equality Predicates and Hash Functions。您可以通过将简单类型的哈希函数与boost::hash_combine

组合来构建哈希函数