我需要使用多個鍵(int類型)來存儲和檢索哈希表中的單個值。我會使用多個鍵索引單個項目。我需要快速插入並查找散列表。順便說一句,我不允許在實現中使用Boost庫。多鍵哈希表(unordered_map)
我該怎麼做?
謝謝。
我需要使用多個鍵(int類型)來存儲和檢索哈希表中的單個值。我會使用多個鍵索引單個項目。我需要快速插入並查找散列表。順便說一句,我不允許在實現中使用Boost庫。多鍵哈希表(unordered_map)
我該怎麼做?
謝謝。
最簡單的方法可能是保留指向列表中元素的指針/索引映射。
雖然需要一些更多細節,但是您需要支持刪除嗎?元素如何設置?你可以使用boost :: shared指針嗎? (相當有幫助,如果你需要支持刪除)
我假設在這種情況下值對象很大,或者有一些其他原因,你不能簡單地複製常規地圖中的值。
如果你的意思是兩個整數形成一個單一的密鑰,然後unordered_map<std::pair<int,int>, value_type>
。如果您想通過多個鍵索引相同的一組數據,請查看Boost.MultiIndex。
如果關鍵看你的容器由多個int
S上的結合,你可以使用boost::tuple作爲你的鑰匙,而不需要您更多的工作來封裝int
秒。如果您的密鑰int
子組件的數量已修復,則此項保持不變。
如果它總是用於檢索的組合。
然後它更好地使用多個密鑰形成單個複合密鑰。
你可以做到這一點無論
保存像是
(int1,int2,int3) => data
的關鍵是整數的一個連接字符串使用像uint64_t中更高的數據類型,其中以U可以添加單獨的值以形成一把鑰匙
// Refer comment below for the approach
方法#2很好,更好的解釋請參見http://stackoverflow.com/questions/3761914/storing-and-retrieving-multiple-keys-in-c/3762694#3762694;公式似乎是不正確的,它可能是(假設'N'是以位爲單位的int寬度):'((int1 << 2 * N)+(int2 << N)+ int3)'提供的'數據' 3 * N'位。 – Arun 2010-09-25 19:50:24
當你說多個鍵時,你的意思是每個鍵都必須單獨索引相同的項目,還是你的意思是多個整數都用於索引單個項目? (也就是說,當你做查找時,你是否提供了一個或所有的多個密鑰?) – 2010-09-25 17:41:12
感謝您的快速回復。我會使用多個鍵索引單個項目。 – Ashley 2010-09-25 17:47:04