我是C ++和数据结构的新手,我有代码来近似最近的邻居,为此我在C ++中实现了一个Kd树。
我的问题如何将kd-tree写入文件以及如何从该文件中读取它?
感谢您的帮助
答案 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
方法(ifstream
,ProblemDriver
)中创建GetGeometry
和DumpGeometry
。