C++ std::map键的最快类型?

C++ std::map键的最快类型?,c++,stl,map,types,key,C++,Stl,Map,Types,Key,我想使用图的分区作为std::map的键 我可以将其表示为节点的std向量。或者我可以将其转换为更紧凑的“自定义”二进制格式(位集?),或字符串表示 为了简单起见,我们可以说图的分区没有固有的顺序 在插入和查找方面,哪一个将是最快的(注意,此映射的大小将以十亿个节点的顺序排列)可靠地回答此问题的唯一方法是回答任何优化问题的唯一方法:试试看 也就是说,我怀疑这两者之间会有很大的区别,只要有一个有效的比较运算符可以使用。保留您的密钥类型,但使用boost的无序映射并为图形分区编写自己的hash()函

我想使用图的分区作为std::map的键

我可以将其表示为节点的std向量。或者我可以将其转换为更紧凑的“自定义”二进制格式(位集?),或字符串表示

为了简单起见,我们可以说图的分区没有固有的顺序


在插入和查找方面,哪一个将是最快的(注意,此映射的大小将以十亿个节点的顺序排列)

可靠地回答此问题的唯一方法是回答任何优化问题的唯一方法:试试看


也就是说,我怀疑这两者之间会有很大的区别,只要有一个有效的比较运算符可以使用。

保留您的密钥类型,但使用boost的
无序映射
并为图形分区编写自己的
hash()
函数


例如,如果顺序无关紧要,您可以对每个节点进行散列,使其对顺序保持不变。如果您现在发布如何对其进行编码,我们可以在这方面提供更多帮助。

如果您有那么多条目,并且性能至关重要,我建议您一定要使用
无序映射

如果您使用的是C++1x,则它位于标准库中;否则,你可以从我这里得到它


如果性能真的很关键,您可以进一步使用。它包含标准库容器的“侵入性”版本:它们复制插入值的指针,而不是值本身。如果值很大,您将获得很大的性能优势。

可能您想要的是
无序的\u映射
,而不是
映射
。当然,
unordered_map
仅在您使用C++0x编译器时可用。@Billy:它在TR1和Boost中也可用。@KennyTM:出于某种原因,我以为您在它前面写了一个
std:
。我的缺点:p当前分区存储为64位整数的数组,其中每个长包含一个组,该长中的每一位表示节点是否为该组的成员。例如,0101、1010表示节点0和2属于组0,节点1和3属于分区的组1