2011-09-04 66 views
0

我需要一個容器的獨特元素訪問與三重int,每個int可以超過1.000.000.000。Boost :: Multiindex與字符串索引boost :: unordered_map

(這些元素中只有少數會被實際填充,實際上這些元素本身就是boost :: unordered_map)。

像boost :: multiindex(或者其他我不知道的)這樣的multiindex數組或者只是一個帶有組合字符串作爲鍵的boost :: unordered_map會更快嗎?

回答

2

多索引不是你想要的,你似乎想要一個單一的索引,其類型是三重。 (除非你真的想要三個獨立的索引;如果我誤解了,請發表評論。)

不要使用字符串,天堂號。只需使用三聯作爲重點:

typedef std::tuple<int, int, int> key_type; 

如果使用std::map<key_type, T>,你對數查找,這可能就足夠了,我想你甚至不用做任何更多的工作(不知道字典比較是由元組默認定義的)。

如果你想使用std::unordered_map<key_type, T>(或升壓版本),你必須定義一個散列函數。我認爲Boost已經有了一個元組,但是C++ 11沒有;但是基於hash_combine()來實現你自己很容易,你只需從Boost代碼中刪除即可。

+0

std :: tuple是我所需要的,謝謝,我不知道這件事。 – St0rM

+0

我確實認爲,'std :: tuple'有一個詞典操作符''內置的......只要*所有*你傳入的類型當然。 –

+0

@Matthieu:歡呼聲,很高興知道。 St0rM:如果你沒有元組,(如果你沒有''也檢查''或''),那麼你可以自己創建一個,或者使用'pair ,int> ... –

相關問題