我有一個類有list of items
(一個名爲ItemList
類的實例)。 這ItemList
類具有的功能,如:boost_unordered的哈希函數,沒有默認可能?
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
點「復位」的項目,以原始值。我不想在項目類中存儲原始值,所以我決定創建一個容器,該容器將itemindex作爲關鍵字,併爲項目構造的原始參數賦值。
由於排序不僅是不需要的,它也是不可能的,我認爲boost :: unordered是要走的路。
改變我用來跟蹤指數的哈希表的雙端隊列產生了一個奇怪的錯誤,但:
X \提升\功能\哈希\ extensions.hpp(176):錯誤C2665:「提升: :哈希值」:無16個重載可以轉換所有的參數類型
凡被創建的列表:
typedef boost::unordered_map<ItemIndexType, ListDataType> ListContType;
如何創建自定義數據類型的哈希函數?
組合起來構建您的散列函數「由於Boost.Unordered使用boost :: hash,它還支持一些其他類型,包括標準容器。要使用這些方法不支持的任何類型,必須擴展Boost.Hash以支持該類型或使用您自己的自定義相等謂詞和散列函數。「 - > http://www.boost.org/doc/libs/1_45_0/doc/html/hash/custom.html – icecrime 2010-11-26 17:34:36
謝謝,這有助於我識別特定的鍵(存儲在myIter中的迭代器),但它仍然不會'std :: * :: iterator轉換爲其中一種構建類型! – paul23 2010-11-26 18:20:22