我需要一个容器的独特元素访问与三重int,每个int可以超过1.000.000.000。Boost :: Multiindex与字符串索引boost :: unordered_map
(这些元素中只有少数会被实际填充,实际上这些元素本身就是boost :: unordered_map)。
像boost :: multiindex(或者其他我不知道的)这样的multiindex数组或者只是一个带有组合字符串作为键的boost :: unordered_map会更快吗?
我需要一个容器的独特元素访问与三重int,每个int可以超过1.000.000.000。Boost :: Multiindex与字符串索引boost :: unordered_map
(这些元素中只有少数会被实际填充,实际上这些元素本身就是boost :: unordered_map)。
像boost :: multiindex(或者其他我不知道的)这样的multiindex数组或者只是一个带有组合字符串作为键的boost :: unordered_map会更快吗?
多索引不是你想要的,你似乎想要一个单一的索引,其类型是三重。 (除非你真的想要三个独立的索引;如果我误解了,请发表评论。)
不要使用字符串,天堂号。只需使用三联作为重点:
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代码中删除即可。
std :: tuple是我所需要的,谢谢,我不知道这件事。 – St0rM
我确实认为,'std :: tuple'有一个词典操作符''内置的......只要*所有*你传入的类型当然。 –
@Matthieu:欢呼声,很高兴知道。 St0rM:如果你没有元组,(如果你没有''也检查''或''),那么你可以自己创建一个,或者使用'pair ,int> ... –