将数据树写入/读取到文件中
Write/Read a kdtree into a file
我是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
)中分别创建ofstream
和ifstream
。
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中