要解释,我想要的是,让地图
std::map<Point, SomeClass> hm_map;
有没有办法在地图的find ()
中使用带参数的比较器? - 有趣的半径Point,所以find ()
必须返回一组正确的对。我想,我为它选择了不正确的容器。
编辑:
comparator::distance = someNumber;
setOfProperPairs = hmap.find (key, comparator);
,其中
struct comparator
{
static double distance;
bool operator()(Point ptg, Point p) const
{ return ptg.Hit (p, distance); }
};
你知道容器用的是什么吗?
答案 0 :(得分:4)
std::map
支持一维排序数据。
如果您想要在两个或更多维度进行几何排序,那么就没有std
支持。
您将需要四叉树(或八角树或更高维的类似物),或r树,或kd树或类似物。
编码有点棘手。
现在,如果您在构建结构之前知道自己关心的半径,那么您可以破解更简单的实现。创建一个正方形的n维网格,其中网格边之间的间距约为所述半径的1/2到2/3。
将数据存储在从网格单元格到精确位置和数据的多图中。
现在进行查找时,找出中心所在的网格,找出网格单元格中可能存在的网格,并搜索所述网格单元格,对位置进行最终检查以查看它是否是命中