c ++ push_back()一个结构到一个向量中

时间:2017-07-18 09:48:04

标签: c++ vector struct push-back

我有一个带坐标的大文件和WayIds。我将其存储在具有以下结构的向量中:

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

该文件如下所示:

  1. 52.8774,6.7442,777

  2. 52.8550,6.7449,777

  3. 52.8496,6.7449,776

  4. 在我的程序中,我已经过滤了WayIds,我希望继续使用它,并将其存储在名为“way”的向量中。使用for循环我可以找到坐标,但我不知道如何将它们存储在带结构的向量中。

        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 但它对我不起作用。 任何人都可以给我一个提示吗? 提前致谢

4 个答案:

答案 0 :(得分: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);
    

答案 1 :(得分: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 ) ;

答案 2 :(得分:0)

您的结构应该已经有一个默认的复制构造函数来完成这项工作,因此您只需使用MyWays.push_back(SOne(Data[i]));而无需更改代码的其他部分

答案 3 :(得分:0)

聚会晚了一点,但我可能会像这样插入数据:

MyWays.push_back({Data[i].X, Data[i].Y, Data[i].WayId});

这应该调用push_back()的move变体,该变体减少了复制。 另外,我可能会为WayId使用一个整数,但这更多是一个偏好问题。