有没有一个map的find()来使用带参数的比较器?
Is there a find () of a map to use a comparator with parameters?
说明一下,我要的,给个图
std::map<Point, SomeClass> hm_map;
有没有办法在地图的 find ()
中使用带参数的比较器? - 我感兴趣的半径点,所以 find ()
必须 return 正确的对集。我想,我为它选择了错误的容器。
编辑:
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); }
};
你知道用什么容器吗?
std::map
支持一维排序数据
如果您想在二维或更多维度上进行几何排序,std
不支持。
你需要四叉树(或八叉树或更高维的类似物),或 r 树,或 kd 树,或类似的。
它们的编码有点棘手。
现在,如果您在构建结构之前知道您关心的半径,就可以破解一个更简单的实现。创建一个正方形 n 维网格,其中网格边之间的间距约为所述半径的 1/2 到 2/3。
将数据存储在从网格单元格到确切位置和数据的多重地图中。
现在在进行查找时,找出中心所在的网格,计算出哪些网格单元可能命中其中,然后搜索所述网格单元,最后检查该位置以查看它是否是一击。
说明一下,我要的,给个图
std::map<Point, SomeClass> hm_map;
有没有办法在地图的 find ()
中使用带参数的比较器? - 我感兴趣的半径点,所以 find ()
必须 return 正确的对集。我想,我为它选择了错误的容器。
编辑:
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); }
};
你知道用什么容器吗?
std::map
支持一维排序数据
如果您想在二维或更多维度上进行几何排序,std
不支持。
你需要四叉树(或八叉树或更高维的类似物),或 r 树,或 kd 树,或类似的。
它们的编码有点棘手。
现在,如果您在构建结构之前知道您关心的半径,就可以破解一个更简单的实现。创建一个正方形 n 维网格,其中网格边之间的间距约为所述半径的 1/2 到 2/3。
将数据存储在从网格单元格到确切位置和数据的多重地图中。
现在在进行查找时,找出中心所在的网格,计算出哪些网格单元可能命中其中,然后搜索所述网格单元,最后检查该位置以查看它是否是一击。