如何实现支持双键独立访问的std::unordered_map式数据结构?
需求:支持双键独立访问的无序映射类型
我有一组条目,每个条目同时带有UID和列表索引两个键。根据场景不同,我只能通过其中一个键访问条目,无法同时获取两个键。需要一种类似std::unordered_map的双键映射类型,比如设想中的std::multi_unordered_map<int, int, ItemType>,核心是仅用任意一个键就能直接访问对应条目。
已排除的方案
我试过几种多键映射方案,但都不符合需求:
- Tessil的库表现不错,但它只维护插入顺序(该顺序和元素索引一致),却不支持通过这个顺序直接访问元素;
- Stack Overflow上的某个解决方案逻辑可行,但要求必须同时知道两个键才能访问,我无法满足这个前提;GeeksForGeeks的相关文章也存在同样问题。
我自己想到的方案
目前能想到的实现方式是用三个哈希表联动:
std::unordered_map<int, int> a; // UID -> 中间值 std::unordered_map<int, int> b; // 索引 -> 中间值 std::unordered_map<int, ItemType> items; // 中间值 -> 条目
通过对应键获取中间值,再用中间值查找目标条目。我知道用std::vector替代std::unordered_map能提升效率,但这种方式需要多步查找,步骤繁琐,希望能避免。
求助方向
有没有适配这种场景的小型库(比如类似Tessil的轻量库)或者公认的标准解决方案?我倾向于避开Boost这类大型库。
内容的提问来源于stack exchange,提问作者Eshy
相关产品推荐
相关产品推荐

