问题
我有时间戳数据,我需要根据时间戳进行搜索,以便获得与我的输入时间戳最接近的一个现有时间戳。
最好用 STL 解决这个问题。boost::* 或 stl::tr1::* (来自带有 Featurepack 的 VS9)也是可能的。
时间戳数据示例:
struct STimestampedData
{
time_t m_timestamp; // Sorting criterion
CData m_data; // Payload
}
使用stl::vector
,sort()
和equal_range()
由于 a map
orset
只允许我找到完全匹配,因此我不再使用其中一个。所以现在我有一个vector
我在数据进入时追加数据的地方。在搜索之前,我使用<algorithm>
'ssort()
并为其提供自定义比较功能。
之后,我使用<algorithm>
'sequal_range()
查找指定值的两个邻居x
。从这两个值中,我检查哪一个最接近x
,然后我有我的最佳匹配。
虽然这不是太复杂,但我想知道是否有更优雅的解决方案。
也许 STL 已经有一个算法可以做到这一点,所以我不会在这里重新发明一些东西?
更新:线性与二进制搜索
我忘了提到我有很多数据要处理,所以我不想线性搜索。
我对向量进行排序的原因sort()
是它具有随机访问迭代器,而map
. 使用 amap
不允许equal_range()
进行具有两倍对数复杂度的搜索。
我对么?