c++ push_back() 将结构体转换为向量
c++ push_back() a struct into a vector
我有一个包含坐标和 WayId 的大文件。我将其存储在具有以下结构的向量中:
struct SOne
{
double y, x, wayId;
};
文件如下所示:
52.8774, 6.7442, 777
52.8550, 6.7449, 777
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() 一个结构到一个向量
但它对我不起作用。
谁能给我一个提示?
提前致谢
- 构建
SOne
.
- 填写对象。
插入到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_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 ) ;
您的结构应该已经有一个默认的复制构造函数来完成这项工作,因此您可以只使用 MyWays.push_back(SOne(Data[i]));
而无需更改代码的其他部分
聚会有点晚了,但我可能会像这样插入数据:
MyWays.push_back({Data[i].X, Data[i].Y, Data[i].WayId});
这应该调用 push_back() 的移动变体,它减少了复制。
另外,我可能会为 WayId 使用一个整数,但这更像是一个偏好问题。
我有一个包含坐标和 WayId 的大文件。我将其存储在具有以下结构的向量中:
struct SOne
{
double y, x, wayId;
};
文件如下所示:
52.8774, 6.7442, 777
52.8550, 6.7449, 777
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() 一个结构到一个向量 但它对我不起作用。 谁能给我一个提示? 提前致谢
- 构建
SOne
. - 填写对象。
插入到
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_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 ) ;
您的结构应该已经有一个默认的复制构造函数来完成这项工作,因此您可以只使用 MyWays.push_back(SOne(Data[i]));
而无需更改代码的其他部分
聚会有点晚了,但我可能会像这样插入数据:
MyWays.push_back({Data[i].X, Data[i].Y, Data[i].WayId});
这应该调用 push_back() 的移动变体,它减少了复制。 另外,我可能会为 WayId 使用一个整数,但这更像是一个偏好问题。