需要一个允许重复值的双向映射,并返回给定键的值列表

本文关键字:映射 返回 列表 一个 许重复 | 更新日期: 2023-09-27 18:08:15

我需要一个数据结构,我认为这应该是一个普遍的需求
我需要一个允许重复值的Map(最常见的是这样,但等等)。言归正传)…请看这个示例

k1 -> v1
k2 -> v1
k3 -> v1
k4 -> v2
k5 -> v2

现在如果我执行map。getbyvalue (v1),我应该得到Set(k1, k2, k3)否则它应该表现得像一个"法线"贴图。它应该有很高的性能,所以没有for循环的建议。
另外,请注意以下内容对我不起作用

v1 -> (k1, k2, k3)
v2 -> (k4, k5)

. .因为我不希望出现这种情况(注意,k1在两个列表中).

v1 -> (k1, k2, k3)
v2 -> (k4, k5, k1)

我不想使用两个映射解决方案。我正在考虑一些方法来保持值排序,使getByValue(值)仍然是高性能的。

需要一个允许重复值的双向映射,并返回给定键的值列表

高性能意味着需要某种索引来搜索键。没有在两个方向上都有效的索引,所以实际上你需要两个。因此,您必须使用两个multimaps,每个方向一个,以及一个将它们保持一致状态的包装器。