我正在使用带有字符串作为键的映射容器,但是仅使用std::map<std::string, Value>
意味着键可能彼此之间不是本地的,由于高速缓存未命中,使得该容器在我的应用程序中使用的成本很高。
是否存在针对该问题的现有解决方案,该解决方案将每个密钥的数据包含在单个可感染的内存池中?
答案 0 :(得分:3)
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() );