問題
入力タイムスタンプに最も近い既存のタイムスタンプを取得するために、タイムスタンプに基づいて検索する必要があるタイムスタンプ付きデータがあります。
できれば、これは STL で解決する必要があります。boost::* または stl::tr1::* (Featurepack を使用した VS9 から) も可能です。
タイムスタンプ付きデータの例:
struct STimestampedData
{
time_t m_timestamp; // Sorting criterion
CData m_data; // Payload
}
stl::vector
、 、sort()
でアプローチequal_range()
map
orset
は正確な一致を見つけることしかできないため、これらのいずれかを使用してそれ以上取得することはできません。これで、入ってくるデータを追加するがvector
できました。検索する前に を使用し、カスタム比較関数を指定します。
その後、's'を使用して、指定された値の 2 つの隣接値を見つけます。これらの 2 つの値から、どちらが最も近いかを確認し、最適な一致を見つけます。<algorithm>
sort()
<algorithm>
equal_range()
x
x
これはそれほど複雑ではありませんが、もっと洗練された解決策があるのではないかと思います。
たぶん、STLにはすでにそれを行うアルゴリズムがあるので、ここで何かを再発明していませんか?
更新: 線形対二分探索
処理するデータが非常に多いため、直線的に検索する必要がないことを忘れていました。
ベクトルを並べ替える理由はsort()
、map
. a を使用すると、2 倍の対数複雑度で検索を実行map
できません。
私は正しいですか?equal_range()