c++ - 具有多种排序和集合的映射(例如不是 [] 类型的映射索引)
问题描述
我有一个大的记录映射,我需要以不同于键的顺序访问映射的子集(有点像数据库的索引)。假设地图上有很多人,并且列出了所有学生(大子集)。其中一个字段是以英寸为单位的高度,另一个是以磅为单位的重量。给定一个学生,我想找到下一个最短和下一个最重的学生。我目前有基于不同字段将键映射到下一个和上一个键的小地图。我试图想出更好的东西。
map<string, bigRecord> mainMap; 矢量学生;
主地图:
- “埃里克”,73 岁,174 岁,学生
- “格雷格”,71 岁,176 岁,学生
- “保罗”,70 岁,173 岁,不是学生
- “皮特”,72 岁,175 岁,学生
学生:“Eric”、“Greg”、Pete”
地图<string, twoStringRecordPrevNext>
学生身高图:
- "埃里克", prev="皮特", next=""
- "格雷格", prev="", next="皮特"
- "皮特", prev="格雷格", next="埃里克"
学生体重地图:
- "埃里克", prev="", next="皮特"
- "格雷格", prev="皮特", next=""
- "皮特", prev="埃里克", next="格雷格"
一旦设置了 mainMap(更新无效列表),我创建学生迷你地图,然后可以轻松找到下一个/上一个给定键。只是需要维护很多地图。
使用 SQL 数据库效果不佳,因为 mainMap 中有数千个集合(即学生是本示例中的集合)和数百万条记录。
关于更好方法的任何想法?
解决方案
在休息并重新开始之后,我认为“上一个/下一个”的事情是不好的部分。我只需要一个 studentHeightVector 来配合小地图。现在,给定“Greg”,我知道这是向量中的第一项,并且可以通过递增找到下一个最高的元素,第二个元素是“Pete”,我可以在 mainMap 中查找它。
学生身高图:
- “埃里克”,3
- “格雷格”,1
- “皮特”,2
学生身高向量:
- “格雷格”
- “皮特”
- “埃里克”
推荐阅读
- android - 设置过滤器结果后,Recyclerview 不显示任何项目
- arduino - Arduino 自定义霓虹灯控制灯光效果
- mongodb - MongoDB 从 3.6 升级到 4.0 后启动超时
- javascript - jQuery UI 在 Windows 智能板上不起作用
- gulp - Gulp Watch 不适用于 Linux 2 (WSL 2) 的 Windows 子系统
- pandas - 具有“主”和浮点数到非浮点数的对象列
- oracle - 如何在 oracle 上选择性地更新数据?
- github-actions - 推送新标签时如何不执行 GitHub 操作?
- reactjs - 如何在字典内的列表内的字典中添加一组键+值
- python - 烧瓶 pandas.read_excel 不工作 - “没有这样的文件或目录” - 而 pandas.read-csv 适用于等效的 CSV 文件