std :: map键的最快类型?

时间:2010-08-21 13:52:25

标签: c++ stl map types key

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

的关键

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

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

在插入和查找方面哪个最快(注意这个地图的大小将是十亿个节点的数量级)

3 个答案:

答案 0 :(得分:4)

保留您的密钥类型,但请使用boost unordered_map并为您的图分区编写自己的hash()函数。

例如,如果顺序无关紧要,则可以按顺序不变的方式对每个节点进行散列。如果您现在发布编码方式,我们可以提供更多帮助。

答案 1 :(得分:3)

如果您要获得那么多条目并且性能至关重要,我建议您明确使用unordered_map

如果您使用的是C ++ 1x,那么它就在标准库中;否则你可以从boost获得它。

如果非常至关重要,那么您可以更进一步使用boost::intrusive。它包含标准库容器的“侵入式”版本:它们复制您插入的值的指针而不是值本身。如果值很大,您将获得巨大的性能优势。

答案 2 :(得分:1)

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

那就是说,我怀疑两者之间存在很大差异,只要有一个有效的比较运算符就可以使用。