Я новичок в C ++ и структуре данных, у меня есть код для аппроксимации ближайших соседей, и для этого я реализовал Kd-дерево на C ++.
Мой вопрос, как я могу записать kd-дерево в файл и как прочитать его из этого файла?
Спасибо за любую помощь
Я новичок в C ++ и структуре данных, у меня есть код для аппроксимации ближайших соседей, и для этого я реализовал Kd-дерево на C ++.
Мой вопрос, как я могу записать kd-дерево в файл и как прочитать его из этого файла?
Спасибо за любую помощь
См. boost :: serialization. Вы можете выбрать один из нескольких форматов вывода - простой текст, xml, двоичный
Если вы новичок в C ++, вам просто нужно понять, что именно вам нужно, и реализовать это правильным простым способом. Таким образом, никакой зависимости от повышения не требуется. Во-первых, ваше 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;
}
В том месте, где вы обращаетесь к самим геометрическим данным (например, double x, y;
), вы должны включить <iostream>
, попробуйте прочитать что-нибудь о C ++ i \ o, если ваш вопрос об этом. Объекты, которым принадлежат 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
), которые вызывают эти функции.