将kdtree写入/读取到文件中 我是C++和数据结构的新手,我有代码来逼近最近的邻居,并且在C++中实现了kd树。p>

将kdtree写入/读取到文件中 我是C++和数据结构的新手,我有代码来逼近最近的邻居,并且在C++中实现了kd树。p>,c++,kdtree,C++,Kdtree,我的问题是如何将kd树写入文件以及如何从该文件中读取它 感谢您的帮助请参阅。您可以在几种输出格式之间选择——纯文本、XML、二进制< /p> < P>如果您是C++新手,您只需了解您需要什么,并以正确的简单方式实现它。因此不需要依赖于boost。 首先,kd树可能存储指向对象的指针,而不拥有它们。考虑通过实际拥有对象的结构(即负责其生命周期)卸载,从而避免重复和泄漏。第二,树通常不存储在文件中,而是在每次加载某些几何体时构建它们,因为它们需要的存储空间超过一个对象数组,并且它们可以包含重复项,需

我的问题是如何将kd树写入文件以及如何从该文件中读取它


感谢您的帮助

请参阅。您可以在几种输出格式之间选择——纯文本、XML、二进制< /p> < P>如果您是C++新手,您只需了解您需要什么,并以正确的简单方式实现它。因此不需要依赖于boost。 首先,kd树可能存储指向对象的指针,而不拥有它们。考虑通过实际拥有对象的结构(即负责其生命周期)卸载,从而避免重复和泄漏。第二,树通常不存储在文件中,而是在每次加载某些几何体时构建它们,因为它们需要的存储空间超过一个对象数组,并且它们可以包含重复项,需要单独跟踪。 因此,如果您知道谁拥有您的对象,您的读/写过程将如下所示

int main(int argc, char** argv) {
  std::string filename = "geometty_dump.txt"      
  if (argc == 2) {  // filename explicitly provided
    filename = *argv[1];
  }
  ProblemDriver driver; // stores geometry owner\owners
  bool res = driver.GetGeometry(filename);
  if (res) res = driver.SolveProblem();
  if (res) res = driver.DumpGeometry();
  return res;
}

在你访问几何数据本身的地方(如<代码>双x,y;<代码>),你必须包含<代码> <代码>,如果你的问题是关于它的话,请尝试阅读关于C++的一些东西。拥有x,y的对象必须具有友元对应函数

ostream& operator<< (ostream out&, const MyPoint& point) {
  out << point.x() << point.y() << '\n';
}
ostream& operator>> (istream in&, MyPoint& point) {
  double x, y;
  in >> x >> y;
  point.set(x, y);
}
ostream&operator x>>y;
点集(x,y);
}
这意味着您可以在调用这些函数的
ProblemDriver
方法(
GetGeometry
DumpGeometry
)中分别创建流
ifstream