Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost::多索引vs字符串索引Boost::无序映射_C++_Boost_Multidimensional Array_Boost Multi Index - Fatal编程技术网

C++ Boost::多索引vs字符串索引Boost::无序映射

C++ Boost::多索引vs字符串索引Boost::无序映射,c++,boost,multidimensional-array,boost-multi-index,C++,Boost,Multidimensional Array,Boost Multi Index,我需要一个包含唯一元素的容器,用三元组int访问,每个int可以超过1.000.000.000 (实际填充的元素很少,实际上这些元素本身就是boost::无序的_映射) 使用像boost::multiindex这样的多索引数组(或者其他我不知道的东西)或者只使用组合字符串作为键的boost::unordered_映射更快吗?多索引不是您想要的,您似乎想要一个类型为三元组的单索引。(除非你真的想要三个独立的索引;如果我误解了,请留下评论。) 不要使用字符串,不。只需使用三元组作为键: typede

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

(实际填充的元素很少,实际上这些元素本身就是boost::无序的_映射)


使用像boost::multiindex这样的多索引数组(或者其他我不知道的东西)或者只使用组合字符串作为键的boost::unordered_映射更快吗?

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

不要使用字符串,不。只需使用三元组作为键:

typedef std::tuple<int, int, int> key_type;
typedef std::元组键类型;
如果您使用
std::map
,您将获得对数查找,这可能就足够了,而且我认为您甚至不必再做任何工作(不确定是否默认为元组定义了词典比较)


如果要使用
std::unordered_map
(或boost版本),必须定义一个哈希函数。我想Boost已经有了一个元组,但C++11没有;但是基于
hash\u combine()
实现自己很容易,您可以从Boost代码中裁剪出来。

我确实认为
std::tuple
有一个字典
operator@Matthieu:干杯,很高兴知道。St0rM:如果你没有元组,(如果你没有元组,也可以查看
),然后你可以自己编一个,或者使用
…事实上,看起来boost::tuple更好,即使现在我不得不绞尽脑汁去发现它是如何工作的。ThanksIt就像一对,只是有更多的元素,访问元素使用一些模板语法。boost元组的优点是,您应该能够直接在无序映射中使用它。事实上,它需要为您的元组定义一个哈希函数,这有点棘手,因为您必须记住元组在boost::tuples下,而不是在boost下。所以它是这样的:
namespace boost{namespace tuples{std::size_t hash_value(key_type const&e){std::size_t seed=0;boost::hash_combine(seed,e.get());boost::hash_combine(seed,e.get());boost::hash_combine(seed,e.get());return seed;}
…但它还是很简单:-)