You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现支持双键独立访问的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:25:57