我有 100 组 A 对象,每组对应一个查询点 Qi 1 <= i <= 100
,.
class A {
int id;
int distance;
float x;
float y;
}
在我的算法的每次迭代中,我选择一个查询点 Qi 并从相应的集合中提取具有最小距离值的对象。然后,我必须在所有 100 个集合中找到这个特定对象,使用它的 id 进行搜索,然后删除所有这些对象。
如果我为每组对象使用一个堆,那么使用MIN(distance)
. 但是,我将无法在使用 id 搜索的其他堆中找到相同的对象,因为堆是使用距离值组织的。此外,更新堆是昂贵的。
我考虑过的另一个选择是map<id, (distance, x, y)>
为每组使用一个。这种按 id 搜索(查找操作)的方式很便宜。但是,提取具有最小值的元素需要线性时间(它必须检查地图中的每个元素)。
是否有任何我可以使用的对我需要的操作都有效的数据结构?
- extract_min(距离)
- 查找(ID)
提前致谢!