【发布时间】:2012-01-05 12:33:29
【问题描述】:
有人可以提出一个优雅的方法来解决以下问题吗?
我有一个以时间为键的多地图,我希望返回最接近指定时间 T 发生的项目。此外,在地图中搜索的时间只能是 T 两侧的一个小时。
尝试了多种技术,但最有效的方法似乎是首先拒绝所有不在 T 小时内的时间,然后遍历剩余项目以找到最接近 T 的时间。
【问题讨论】:
有人可以提出一个优雅的方法来解决以下问题吗?
我有一个以时间为键的多地图,我希望返回最接近指定时间 T 发生的项目。此外,在地图中搜索的时间只能是 T 两侧的一个小时。
尝试了多种技术,但最有效的方法似乎是首先拒绝所有不在 T 小时内的时间,然后遍历剩余项目以找到最接近 T 的时间。
【问题讨论】:
只需使用map.lower_bound() 查找不低于您要查找的第一个时间,然后只需检查相邻的(较小的)是否比lower_bound() 返回的更近,您就完成了。
【讨论】:
T 介于lower_bound - 1 和lower_bound 之间,我看不出它如何离另一个键更近。或者您的意思是,由于我们正在处理多地图,因此可能有几个项目最接近 T?
lower_bound 返回的第一个不是更小,所以您只需要检查更小的那个。
lower_bound和lower_bound - 1就可以找到最接近的key,但是这个key可以关联多个值;这就是我对@larsmans 的问题的意思。
首先尝试查找具有确切时间的条目怎么样。如果未找到,则检查 time + 1,然后 time - 1,然后 time + 2,等等,直到从 time 达到一小时的限制。
【讨论】:
lower_bound() 实际上返回完全匹配,如果有的话。