2011-09-04 67 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> ... –

相关问题