2012-01-05 7 views
3

誰かが次の問題を解決するためのエレガントな方法を提案できますか?指定された時刻に最も近いマルチマップの時刻にイテレータを返す

私は時間によってキーが設定されているので、指定時刻Tに最も近いアイテムを返すことができます。さらに、マップ内で検索される時間は、T.

は、複数の技術を試してみました、しかし、最も効率的には、まずTの時間内にないすべての時間を拒否するように見える、その後、T.

答えて

9

だけで使用する1つの最も近いを見つけるために、残りの項目を反復処理しますmap.lower_bound()あなたが探しているものよりも低くない最初の時間を見つけるには、lower_bound()で返されたものよりも近くにある場合は隣接する(小さい)ものをチェックしてください。 。

+0

実際には、実際の時間* T *との差が減少しなくても、「チェック隣接」ステップを繰り返し実行する必要があると思います。 –

+0

@larsmans:詳しいことはできますか?マルチマップは順序付けされているので、 'T'は' lower_bound-1'と 'lower_bound'の間にありますが、別のキーからどのように近いか分かりません。多分、マルチマップを扱っているので、 'T 'に最も近いいくつかの項目があるかもしれないということでしょうか? –

+0

@ルクトゥーラン:私のところで思う。決して気にせず、+1してみましょう。 –

0

正確な時刻のエントリを最初に見つけようとします。見つからない場合は、時間+ 1、時間-1、時間+2などをチェックし、時間から1時間の制限に達するまで待ちます。

+2

タイムスタンプの細かさによっては、ルックアップの*ロット*が発生する可能性があります。 –

+0

@larsmans完全一致の最初の確認はどうでしょうか?見つからなければLet_Me_Beのようなことを示唆していますか? –

+1

完全一致を確認することは、@ Let_Me_Beのアプローチに対する(時期尚早の)最適化です。 –

関連する問題