Boost :: Multiindex vs string索引的boost :: unordered_map

时间:2011-09-04 13:22:25

标签: c++ boost multidimensional-array boost-multi-index

我需要一个使用三元组int访问的唯一元素的容器,每个int可以超过1.000.000.000。

(实际上只会填充其中的一些元素,实际上这些元素本身就是boost :: unordered_map)。

拥有像boost :: multiindex这样的多索引数组(或者其他我不知道的东西)或者只是一个带有组合字符串作为键的boost :: unordered_map会更快吗?

1 个答案:

答案 0 :(得分: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代码中删除它。