使用boost unordered_map

时间:2010-05-02 21:39:48

标签: performance boost unordered-map

伙计们,我正在使用动态编程方法来解决问题。以下是该方法的简要概述

  1. 使用25个唯一键识别生成的每个值。
  2. 我使用 boost :: hash_combine 使用这25个密钥为哈希表生成种子
  3. 我将值存储在声明为

    的哈希表中

    boost::unordered_map<Key_Object, Data_Object, HashFunction> hashState;

  4. 我对算法进行了时间分析,发现运行时间几乎 95%用于检索/插入哈希表中的数据。

  5. 这些是我的哈希表的详细信息

    hashState.size() 1880

    hashState.load_factor() 0.610588

    hashState.bucket_count() 3079

    hashState.max_size() 805306456

    hashState.max_load_factor() 1

    hashState.max_bucket_count() 805306457

  6. 我有以下两个问题

    1. 我可以采取哪些措施来改善哈希表的插入/检索操作的性能吗?

    2. C ++ STL有hash_multimap,也符合我的要求。在插入/检索性能方面,boost库 unordered_map 如何与 hash_multimap 进行比较。

2 个答案:

答案 0 :(得分:0)

如果您的哈希函数不是罪魁祸首,那么您可以做的最好的事情就是使用不同的地图实现。由于您的密钥非常大,因此使用Boost.Intrusive library中的unordered_map可能是最佳选择。或者,您可以尝试关闭散列:Google SparseHashMCT,但肯定需要进行分析,因为当元素足够小时,建议使用闭合散列。 (SparseHash更成熟,经过充分测试,但MCT不需要那些set_empty() / set_deleted()方法。

编辑:

我刚刚注意到我提到的Boost库中没有侵入式地图,只有set和multiset。不过,您可以尝试两个封闭的散列库。

编辑2:

STL hash_map不是标准的,它可能是一些扩展,不能在编译器之间移植。

答案 1 :(得分:0)

您确定您使用的哈希函数不是瓶颈吗? 哪个时间百分比采用哈希函数? 您是否可以通过简单调用哈希来执行相同的测试并替换插入/检索。

相关问题