基于地图中的第二个值进行搜索

时间:2011-07-21 14:52:20

标签: algorithm map

我有字符串ID - >的映射对象即可。除了必须插入和删除到这个地图之外,我还需要找到具有最低x值的id(x值是实例化Object的Class中的成员)。

最初我以为我可以创建另一个映射 x-value - >字符串ID 为此。但这并没有多大帮助,因为在删除操作的情况下,我现在必须在第二个地图中搜索特定的id(所以我们现在回到主要问题)。

有效建议吗? (时间 - 记忆不是一个很大的约束)

编辑:我想我可以从id(用于删除功能)获取x值,并使用x值从第二个地图中删除。另一件事 - x值是一个浮点数。在地图中使用float作为键的好主意?也许使用fabs和精度值可以在这里进行浮点比较?

编辑#2:不幸的是我记得为什么上面的方法可能不起作用(我忙于其他的东西并暂时忘记了这个项目)。不同地图条目的x值不是唯一的。字符串ID是主键。所以我需要使用multimap并使用equal_range。

3 个答案:

答案 0 :(得分:1)

您使用辅助地图的解决方案并不像您的帖子所暗示的那么糟糕。

确实,删除操作需要在第二个映射中进行查找。但是,此查找可以在O(log n)时间内完成。这不太可能成为交易破坏者。如果是,请发布更多详细信息。

答案 1 :(得分:1)

您多久删除一次物品?通常在这种情况下你也必须考虑操作的频率。如果不经常使用第二张地图进行删除可能非常好。

答案 2 :(得分:1)

如果你使用树形图进行第二次映射,你将立即拥有最小元素,并且需要O(log n)从中删除元素。

另一种替代方法是使用双链表支持的优先级队列来查找最小元素,并在第一个映射中记住直接引用元素的节点。此节点可用于删除。