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

c++ push_back() a struct into a vector

本文关键字:一个 向量 结构体 push C++ back      更新时间:2023-10-16

我有一个包含坐标和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

在我的程序中,我已经过滤了我想继续使用的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(( 一个结构到一个向量中 但它对我不起作用。 谁能给我一个提示? 提前致谢

  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 使用整数,但这更多的是偏好问题。