是否有地图的find()使用带参数的比较器?

时间:2015-01-29 21:00:52

标签: c++ dictionary find

要解释,我想要的是,让地图

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); }
};

你知道容器用的是什么吗?

1 个答案:

答案 0 :(得分:4)

std::map支持一维排序数据。

如果您想要在两个或更多维度进行几何排序,那么就没有std支持。

您将需要四叉树(或八角树或更高维的类似物),或r树,或kd树或类似物。

编码有点棘手。

现在,如果您在构建结构之前知道自己关心的半径,那么您可以破解更简单的实现。创建一个正方形的n维网格,其中网格边之间的间距约为所述半径的1/2到2/3。

将数据存储在从网格单元格到精确位置和数据的多图中。

现在进行查找时,找出中心所在的网格,找出网格单元格中可能存在的网格,并搜索所述网格单元格,对位置进行最终检查以查看它是否是命中