C++ 当密钥分配为字符串时,是否有优化版本的Map?

C++ 当密钥分配为字符串时,是否有优化版本的Map?,c++,dictionary,memory,C++,Dictionary,Memory,我使用了一个带有字符串的映射容器作为键,但简单地使用std::map意味着键之间可能不是本地的,这使得在我的应用程序中使用该容器的成本很高,因为缓存未命中 是否有一种现有的解决方案可以将每个密钥的数据保存在一个具有传染性的内存池中?可能,可以帮助您,因为: 密钥是散列的 在内部,项目存储在桶中,就像在一个容器中一样 访问时间是恒定的 附加备注: 此代码段允许您使用bucket界面了解地图的布局: std::cout << "Bucket count: " <<

我使用了一个带有字符串的映射容器作为键,但简单地使用
std::map
意味着键之间可能不是本地的,这使得在我的应用程序中使用该容器的成本很高,因为缓存未命中

是否有一种现有的解决方案可以将每个密钥的数据保存在一个具有传染性的内存池中?

可能,可以帮助您,因为:

  • 密钥是散列的
  • 在内部,项目存储在桶中,就像在一个容器中一样
  • 访问时间是恒定的
附加备注:

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

    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; 

您的意思是您知道字符串很可能会分散在内存中?确保您首先阅读了,然后,如果需要,检查
std::map
Alloc
参数。查看
std::map
模板的第三个参数。您指的是第四个?@πάνταῥεῖ - 我忘了你可以写自定义分配器。。。痛苦的记忆又回到了我的记忆中me@OznOg我的意思是Alloc参数,是的。我怀疑,你在网上演示的代码在将来能用多久。因此,这可能是一个好主意,过去它本身如此。(IMHO):@JeJo谢谢你的评论!事实上,关于这个问题,代码中最相关的部分已经在帖子中了(正是因为你提到的原因)。剩下的部分相当琐碎。也就是说,ideone是一家老牌公司的网站,它永远保存着代码:你可以在2012年以前的很多帖子上找到代码,这些帖子仍然可以访问:-)
m.rehash (2*m.bucket_count() );