【发布时间】:2016-04-09 08:20:55
【问题描述】:
我拿着一张按std::pair<K, V> 排序的地图。 (它的类型是std::map<std::pair<K, V>, size_t>)。我想找到具有给定第一个坐标的任何对(即固定K,查找地图中是否有任何对象,形式为std::pair<K, _> 的键,我不关心第二个坐标)。显然它可以在 O(log n) 中完成,因为搜索特定对也在 O(log n) 中完成 [这是标准的 find() 操作]。有什么方法可以做到这一点,而不必从头开始编写我自己的地图?
还有一件事 - 我无法更改比较功能,因为我希望像 (1,2), (1,3) 这样的对是不同的,如果比较器只比较键,它会将它们视为相等。我想保留标准的 find() 操作,因为我也需要使用它。
Finding any element with specific first coordinate in set<pair> > 的解决方案将不起作用,因为我只保证operator < 提供给K 和V。不知道std::numeric_limits是不是专门针对K
【问题讨论】:
-
泛型类型(模板类)
-
我只保证 K 和 V 都提供了操作符
-
如果你允许 C++14,你可能会得到更多有趣的答案,涉及 is_transparent。
-
我投票决定重新提出您的问题,因为您说您不知道是否可以获得最小值。我还编辑你的问题来解释这一点。如果您不喜欢,请随时编辑。
-
您可以将 numeric_limits 值替换为 V 的任何值(例如,从第一个元素复制它)。然后你需要检查lower_bound和前一个元素的输出,但是这个想法仍然有效。