我正在寻找根据两个排序参数中的位置从大型集合中提取对象的最佳方法。
例子:
struct Object{
Time start;
Time end;
//... data
};
现在,任何时候t
我都想快速找到在这段时间内“存在”的所有对象,即t
在对象start
和end
值之间。
我想到的方法是使用:
std::multimap<Time, object*> objectsOrderedByStart;
std::multimap<Time, object*> objectsOrderedByEnd;
(multimap
因为可能有许多具有相同Time
值的对象,它们是排序的键)
每次我创建一个时,Object
我都会将它添加到每个multimap
对象中,它会自动将对象放置在一个排序列表start
中end
。
然后,我通过查找wheret
中的所有对象和whereobjectsOrderedByStart
中的对象来“查询”我的有效对象的时间,然后只获取两个结果集中的对象。但这似乎效率低下,我能想到的唯一找到联合的技术是逐个检查一个结果集并查看该对象是否在另一个结果集中。t>Time
objectsOrderedByEnd
t<End
但是我怀疑这不是最有效的方法。我可以通过在迭代 each 时跳过元素来进行迭代multimap
,而不是逐个迭代,然后如果我走得太远,然后从最后一个跳过点开始逐个迭代。或者,我可以只保留一个multimap
,然后在每个内部object
查看它的end
时间。
但我怀疑有更好的方法来组织这些数据并找到我感兴趣的范围内的数据?