簡體   English   中英

將kdtree寫入/讀取文件

[英]Write/Read a kdtree into a file

我是C ++和數據結構的新手,我有代碼可以近似最近的鄰居,為此,我在C ++中實現了Kd樹。

我的問題是如何將kd-tree寫入文件以及如何從該文件讀取它?

謝謝你的幫助

參見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);
}

這意味着您將在調用這些函數的ProblemDriver方法( GetGeometryDumpGeometry )中ProblemDriver創建ofstreamifstream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM