...感谢您的阅读...我仍在学习绳索,请原谅... ;-)我正在写一个在空间上划分实体的函数。网格是通过使用“Node”类的对象完成的,每个节点由以下方式表示:int iddouble pdouble r最初,我认为应该使用 map :有了 map ,我就可以在“id”键和第二个键(指向节点对象的指针)之间建立关联。像这样:int nodeId;Node *node;std::map<int, Node *> NodeMap;然后,当我创建节点时,我只需调用"new"运算符即可。例如在for循环中,我做这样的事情:node = new Node(i); // the node constructor sets the id to the value of i.然后将新节点添加到 map 中:NodeMap[i] = node;但是....我意识到,我将不需要在 map 中进行查找,而不是通过第一个键(id),而是通过p和r参数(节点的坐标)进行查找。换句话说,给定p和r的值,我将需要一些返回节点id的东西。如果使用整数第一个键(id)完成查找,则映射是理想的容器。有人对如何解决这个特定问题有建议吗?非常感谢!AsvP。 最佳答案 map 将不起作用。 C++关联容器在键相等性的基础上工作,并且比较浮点数是否相等根本不起作用。听起来您需要根据x和y找到一个节点。最好的方法取决于您要完成的工作。您是要在给定坐标的情况下查找最近的节点,还是要计算与节点非常接近的坐标,然后需要找到该节点?对于第二个,您可能会在x或y坐标上对节点进行排序(我假设是x),然后进行二进制搜索来查找哪些节点的x坐标非常接近给定的x。通常,这将选择少量节点,可以搜索大约正确的y。(当然,如果节点位于某种可预测的网格中,则您应该能够提供一些直接计算的方法,例如,如果您有积分的晶格点,则将x和y取整到最接近的整数。)如果您需要找到最近的节点,那就有点复杂了。我对此了解不足,无法提供太多帮助,但是有一些几何算法的资源。
09-27 14:14
查看更多