我有一个有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;
如何为自定义数据类型创建哈希函数?
答案 0 :(得分:2)
您的密钥数据类型需要等式谓词和哈希函数,请参阅Equality Predicates and Hash Functions。您可以通过将简单类型的哈希函数与boost::hash_combine
组合来构建哈希函数