我有一个问题,我有一个不同城市和道路的文件,我做了一个名为Ville(法语城市)的课程和一个名为Route(法语之路)的课程,我需要把我所有的Ville放到一个矢量中我和我所有的路线都进入了路线的路径
Ville构造函数就像这样调用:
Ville *myCity = new Ville("myCity");
和道路建设者:
Route *myRoad = new Road("myRoad",400, 130, myCity1, myCity2);
其中参数是道路的名称,大小,最大速度以及通过道路连接的两个城市。
文件看起来像:
< ville>
Paris
Berlin
...
< /ville>
< route>
A0 400 130 Paris Berlin
...
</route>
我为数据提取做了这个:
std::string element;
int statut = 0;
while(fichier >> element)
{
if(element == "</ville>" || element == "</route>")
{
statut = 0;
fichier >> element;
}
if(element == "<ville>" || statut == 1)
{
if(statut == 0)
{
fichier >> element;
}
cout << "Ville: " << element << endl;
statut = 1;
}
if(element == "<route>" || statut == 2)
{
if(statut == 0)
{
fichier >> element;
}
cout << "Route: " << element;
fichier >> element;
cout << " Taille: " << element;
statut = 1;
fichier >> element;
cout << " Speed: " << element;
fichier >> element;
cout << " Relie: " << element;
fichier >> element;
cout << " à " << element <<endl;
statut = 2;
}
}
}
else
{
cout << "Error: Can't open the file" << endl;
}
我正在寻找一种方法,可以让我做类似的事情:
Ville *element = new Ville (element);
或者我应该改变提取数据的方式以便轻松转换为对象?
答案 0 :(得分:0)
您似乎需要std::map
:
std::map<string, Ville*> cities;
std::vector<Route> roads;
您检索城市数据的位置:
cities[element] = new Ville(element);
以及检索道路数据的位置
roads.push_back(Route(name, size, speed,
cities.at(cityName1),
cities.at(cityName2)));
答案 1 :(得分:0)
好的,所以你不能在C ++中直接做你想做的事情。虽然有一些解决方法:
您可以创建map<string, Ville*>
,让我们称之为myCities:
然后,您可以通过阅读“&#39;元素”来使用此地图。从文件中,然后使用代码:
myCities[element] = new Ville(element);
从此时起,您可以myCities["whichever city you want"]
访问您的商品。除此之外,我无法想到一个简单的方法,因为C ++不支持动态命名的变量。