c++ - 当键被分配字符串时,是否有优化的 Map 版本?
问题描述
我正在使用一个带有字符串作为键的地图容器,但简单地使用std::map<std::string, Value>
意味着键可能不是彼此本地的,由于缓存未命中,使得在我的应用程序中使用该容器的成本很高。
是否存在解决此问题的现有解决方案,将每个单独的密钥数据保存在一个具有传染性的内存池中?
解决方案
可能,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() );
推荐阅读
- python - ValueError:时间数据 '19/06/18 10:40:01' 与格式 '%d/%m/%Y %H:%M:%S' 不匹配
- python-3.x - 使用 lambda 将字典映射到熊猫系列
- python - 每次单击按钮时如何更改 random_number 变量?
- arduino - Arduino,来自 BT-Module 的输入正在堆叠和添加
- python - 如何在 Python 中对值进行分组和聚合(使用 np.sum)对它们进行排序?
- c++ - 为什么对函数内部的指针所做的更改在函数外部不可见?
- swift - 我如何每秒将 2 加到我的分数上,我是 Xcode 的新手 btw
- asp.net - ASP.Net Core MVC - 列表
多选未显示 select = true 项目 - php - 带有参数的 symfony 路由上的 css/js 路径错误
- java - 我需要在 POJO 中反序列化具有多个类的复杂 JSON