将kdtree写入/读入文件

时间:2011-04-24 05:54:52

标签: c++ kdtree

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如果您是C ++的新手,您只需要了解您需要什么,并以正确的方式实现它。因此不需要提升依赖性。 起初 - 您的kd树可能存储指向对象的指针而不拥有它们。考虑通过实际拥有对象(负责其生命周期)的结构来转储\ loading,从而避免重复和泄漏。第二步 - 通常树不存储在文件中,而是每次加载某些几何体时都会构建树,因为它们需要的存储空间不仅仅是一个对象数组,而且它们可以包含需要单独跟踪的重复项。 因此,如果您弄清楚谁拥有您的对象,您的读/写过程将类似于

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

在您访问几何数据本身的位置(如double x, y;),您必须包含<iostream>,如果您的问题是关于它,请尝试阅读有关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);
}

意味着您分别在调用这些函数的ofstream方法(ifstreamProblemDriver)中创建GetGeometryDumpGeometry