c++ push_back() 将结构体转换为向量

c++ push_back() a struct into a vector

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

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

文件如下所示:

  1. 52.8774, 6.7442, 777

  2. 52.8550, 6.7449, 777

  3. 52.8496, 6.7449, 776

在我的程序中,我已经过滤了我想继续工作的 WayId,并将其存储在名为“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

我试着按照这个 link: push_back() 一个结构到一个向量 但它对我不起作用。 谁能给我一个提示? 提前致谢

  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);
    

您可以使用 std::vector::emplace_backData 向量中插入元素,假设它也有 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 ) ;

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

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

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

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