2017-07-18 57 views
0

我有一個帶有座標和WayIds的大文件。我存儲在向量與下面的結構:C++ push_back()一個結構到一個向量中

struct SOne 
{ 
    double y, x, wayId; 
}; 

文件看起來是這樣的:

  1. 52.8774,6.7442,777

  2. 52.8550,6.7449,777

  3. 52.8496,6.7449,776

在我的程序中,我已經過濾了我想繼續工作並存儲在名爲「way」的向量中的WayIds。用for循環我可以找到座標,但我不知道如何將它們存儲在帶有struct的向量中。

vector<SOne> MyWays; 
for (int i = 0; i < Data.size(); i++) { // Data -> my file with all coordinates and wayIds 
    for (size_t j = 0; j < way.size(); j++){ 
     if (Data[i].WayId == way[j]) // way[j] -> here i get the WayId i like to work with 
     { 

     } // if 
    } // for 
} // for 

我試圖關注此鏈接:push_back() a struct into a vector 但它不適用於我。 任何人都可以給我一個提示嗎? 在此先感謝

+5

您是什麼意思「它不適合我」?不是'MyWays.push_back(方法[j]);'你在找什麼? – freakish

+3

您不顯示「沒有工作」的代碼。這也是一個好主意,它也能精確地顯示那段代碼。 「沒有工作」太模糊。發生了什麼?編譯時或運行時錯誤?如果是這樣,請顯示消息的確切文本。將所有這些信息添加到您的問題。 –

+1

什麼是數據類型? – Holt

回答

3
  1. 構造SOne
  2. 填充對象。
  3. 插入MyWays

    SOne sOneObj; 
    sOneObj.x = Data[i].X; 
    sOneObj.y = Data[i].Y; 
    sOneObj.wayId = Data[i].WayId; // = way[j] 
    MyWays.push_back(sOneObj); 
    
2

您可以使用std::vector::emplace_back插入來自您的Data矢量元素,假定它有X,Y,以及

struct SOne 
{ 
    SOne(double y_in, double x_in, double wayId_in): 
    y(y_in), x(x_in), wayId(wayId_in) 
    { } 

    ~SOne() { } 

    SOne& SOne=(const SOne& other) = default; 
    SOne(const SOne& other) =default; 

    double y, x, wayId; 
}; 

// Inside the if check simply do : 
MyWays.emplace_back(Data[i].X, Data[i].Y, Data[i].WayId) ; 
0

你的結構應該已經有一個默認的拷貝構造函數做因此您只需使用MyWays.push_back(SOne(Data[i]));而不更改您的代碼的其他部分