将数据树写入/读取到文件中

Write/Read a kdtree into a file

本文关键字:读取 文件 数据      更新时间:2023-10-16

我是c++和数据结构的新手,我有代码来近似最近邻,为此我在c++中实现了一个kd树。

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

感谢您的帮助

参见boost::serialization。您可以选择几种输出格式-纯文本,xml,二进制

如果你是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 ownerowners
  bool res = driver.GetGeometry(filename);
  if (res) res = driver.SolveProblem();
  if (res) res = driver.DumpGeometry();
  return res;
}

在你访问几何数据本身的地方(如double x, y;),你必须包括<iostream>,如果你的问题是关于它的,试着读一些关于c++ io的东西。拥有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);
}

意思是在调用这些函数的ProblemDriver方法(GetGeometry, DumpGeometry)中分别创建ofstreamifstream