首页 > 解决方案 > 当键被分配字符串时,是否有优化的 Map 版本?

问题描述

我正在使用一个带有字符串作为键的地图容器,但简单地使用std::map<std::string, Value>意味着键可能不是彼此本地的,由于缓存未命中,使得在我的应用程序中使用该容器的成本很高。

是否存在解决此问题的现有解决方案,将每个单独的密钥数据保存在一个具有传染性的内存池中?

标签: c++dictionarymemory

解决方案


可能,std::unordered_map可以帮助你,因为:

  • 键被散列
  • 在内部,项目存储在桶中,就像在哈希表中
  • 访问时间是恒定的

补充说明:

此代码段允许您使用存储桶界面了解地图的布局:

    std::cout << "Bucket count: " << m.bucket_count() <<std::endl; 
    for (int i=0; i < m.bucket_count(); i++ ) {
        std::cout <<"   bucket "<< i << " : size " << m.bucket_size(i) << std::endl;
    }
    std::cout<<"Average bucket load:" <<m.load_factor()<<std::endl; 

如果您从一开始就没有预见到足够的桶,并且如果地图的动态增长导致次优的桶负载与太多的冲突,您可以重新散列地图:

m.rehash (2*m.bucket_count() );

在线演示


推荐阅读