我想使用图形的分区作为std :: map
的关键我可以将其表示为节点的std向量。或者我可以将它转换为更紧凑的“自定义”二进制格式(bitset?)或字符串表示。
为了简单起见,我们可以说图表的分区没有固有的顺序。
在插入和查找方面哪个最快(注意这个地图的大小将是十亿个节点的数量级)
答案 0 :(得分:4)
保留您的密钥类型,但请使用boost unordered_map
并为您的图分区编写自己的hash()
函数。
例如,如果顺序无关紧要,则可以按顺序不变的方式对每个节点进行散列。如果您现在发布编码方式,我们可以提供更多帮助。
答案 1 :(得分:3)
如果您要获得那么多条目并且性能至关重要,我建议您明确使用unordered_map
。
如果您使用的是C ++ 1x,那么它就在标准库中;否则你可以从boost获得它。
如果非常至关重要,那么您可以更进一步使用boost::intrusive。它包含标准库容器的“侵入式”版本:它们复制您插入的值的指针而不是值本身。如果值很大,您将获得巨大的性能优势。
答案 2 :(得分:1)
可靠回答此问题的唯一方法是回答任何优化问题的唯一方法:尝试并查看。
那就是说,我怀疑两者之间存在很大差异,只要有一个有效的比较运算符就可以使用。