Запись / чтение kdtree в файл

Я новичок в C ++ и структуре данных, у меня есть код для аппроксимации ближайших соседей, и для этого я реализовал Kd-дерево на C ++.

Мой вопрос, как я могу записать kd-дерево в файл и как прочитать его из этого файла?

Спасибо за любую помощь


person lassoued    schedule 24.04.2011    source источник


Ответы (2)


См. boost :: serialization. Вы можете выбрать один из нескольких форматов вывода - простой текст, xml, двоичный

person ognian    schedule 24.04.2011

Если вы новичок в 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), которые вызывают эти функции.

person Riga    schedule 24.04.2011