私はこのようなコンテナを持っています:
// Sort functor
struct SortByTime :
std::binary_function<const TimeSortableData &, const TimeSortableData &, bool>
{
bool operator()(const TimeSortableData & a, const TimeSortableData & b) const
{
return a.GetTime() < b.GetTime();
}
};
// Container that sorts by time
typedef std::multiset<TimeSortableData, SortByTime> TimeSortedData;
time の前に最後のデータ オブジェクトを取得したい場合はt
、ダミー オブジェクトを作成して を呼び出すことができますupper_bound()
。
TimeSortableData dummy(t);
TimeSortedData::const_iterator it = mySortedData.upper_bound(dummy);
--it;
// result = *it;
これにより、対数検索が複雑になります。
不器用に見えることは別として、このようなダミーオブジェクトを作成するのが非常に難しい場合、このアプローチには問題があります (実行時のパフォーマンスではなく、コーディングの手間がかかります)。
私は見ましたstd::multiset::key_comp
が、それをどのように使用できるかわかりません..
両方ともstd::multiset::find()
、コンテナの、つまりオブジェクトstd::binary_search()
を提供してほしい...key_type
TimeSortableData
ダミー オブジェクトを作成せずに効率的に検索するにはどうすればよいですか?
コメントからの更新:
もあります:find_if()
ダミー オブジェクトを作成する手間を省きますが、O(n) の複雑さを犠牲にします。