0

我从文件中读取点,我使用库 Lemon (因为我想稍后使用图形)因此每个点都由类型表示:dim2 :: Point。所以我使用了图书馆柠檬/dim2.h

我的问题是每个点都有许多视频帧,所以我使用这段代码将文件中的变量放入向量中:

std::ifstream file("file1.txt");
std::vector<dim2::Point<int>> pointTable;
std::vector<int> frame;

int temp, temp2,temp3;
while (file >> temp >> temp2 >> temp3)
{
    pointTable.push_back(dim2::Point<int>(temp, temp2));

     frame.push_back(temp3);
}
//int tailleFmax = frame.max_size;

 for (int i = 0; i < (36) ;i++)
 //cout << frame[i] <<endl;
// cout << trajectoire[i].x << endl;
 cout << trajectoire[i].y << endl;

我的问题:我不知道如何在 C++ 中表示每个点和他的帧号之间的连接,并将这个变量命名为 Trajectory。

文件示例:
155 // 即 x
168 // 即 y
0 // 即帧号
364
245
20
546
156

4

1 回答 1

0

我怀疑 amap<int, dim2::Point<int>>是你要找的。

dim2::Point您还可以通过使用提取运算符直接读取点来简化代码:http: //lemon.cs.elte.hu/pub/doc/latest-svn/a00862.html#g2dd3eccf5dece76c03bc6d1c2f348643

您的最终代码应如下所示:

ifstream file("file1.txt");
map<int, dim2::Point<int>> frame2PointTable;
pair<int, dim2::Point<int>> temp;

while(file >> temp.second >> temp.first) frame2PointTable.insert(temp);

要输出它,您可以执行以下操作:

for(const auto& i : frame2PointTable) cout << i.first << ": (" << i.second.x << ", " << i.second.y << ")\n";

重要笔记:

  1. 您的示例文件包含 3 个点但只有 2 个帧号,在这种情况下,只会插入 2 个帧号点组合
  2. 如果您在一个文件中有多个相同的帧号,则只有第一个实例将被接受frame2PointTable

我给你写了一个活生生的例子,pair<int, int>而不是在dim2::Point这里:http: //ideone.com/qtCZ8L

于 2016-07-08T11:37:22.107 回答