我有一个带坐标的大文件和WayIds。我将其存储在具有以下结构的向量中:
struct SOne
{
double y, x, wayId;
};
该文件如下所示:
52.8774,6.7442,777
52.8550,6.7449,777
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() a struct into a vector 但它对我不起作用。 任何人都可以给我一个提示吗? 提前致谢
答案 0 :(得分:3)
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);
答案 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使用一个整数,但这更多是一个偏好问题。