我需要一个包含唯一元素的容器,以便使用三元组 int 访问,并且每个 int 可以超过 1.000.000.000。
(实际上只有少数元素会被填充,实际上这些元素本身就是 boost::unordered_map )。
拥有像 boost::multiindex (或者我不知道的其他东西)这样的多索引数组或者只是一个以组合字符串作为键的 boost::unordered_map 是否更快?
我需要一个包含唯一元素的容器,以便使用三元组 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 已经有一个用于元组的,但 C++11 没有;但是基于它可以很容易地实现自己hash_combine()
,您可以从中裁剪出 Boost 代码。