通常使用需要快速查找定位的数据时,会通过 set/map 等保存数据,然后使用find等算法进行查找。
但有时想查找的数据不能完全匹配,而是查找一个最接近的值(比如,在两个不同的数据结构中,想匹配出ID相同,且发生时间最接近的数据)时,STL没有提供可用的函数,一般的做法就是将数据全部遍历计算一遍,然后选取最接近的值。其算法复杂度为 O(n)。
通过扩展,写出通用的模版算法 find_nearest 可以完成这个功能,适用于 set/map。
PS:原本想找现成的,可惜没有找到,只有自己写一个。感觉这个人的目的和我的比较接近:http://topic.youkuaiyun.com/u/20071112/10/226d912b-05b5-4e2f-8f8e-0a93ec76eeca.html
废话不多说了,直接上代码和UT。
代码:
UT(CppUnit):