Boost::Multiindex vs string indexed boost::unordered_map

Boost::Multiindex vs string indexed boost::unordered_map

本文关键字:unordered map boost string Multiindex vs Boost indexed      更新时间:2023-10-16

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

(实际上只有少数元素会被填充,实际上这些元素本身就是boost::unordered_map)。

是否有一个多索引数组,如boost::multiindex(或其他我不知道的东西)或只是一个boost::unordered_map与一个组合字符串作为一个键更快?

多索引不是您想要的,您似乎想要一个类型为三元组的单一索引。(除非你真的想要三个独立的索引;如果我误解了,请留下评论。

不要使用字符串,天哪没有。只使用三元组作为键:

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

如果你使用std::map<key_type, T>,你得到对数查找,这可能是足够的,我认为你甚至不需要做任何更多的工作(不确定字典比较是否默认定义为元组)。

如果您想使用std::unordered_map<key_type, T>(或boost版本),则必须定义一个哈希函数。Boost已经有一个元组,我想,但c++ 11没有;但这是很容易实现自己基于hash_combine(),你可以只裁剪出的Boost代码。