【发布时间】:2020-06-09 04:46:22
【问题描述】:
所以我有 3 个多图,它们都具有相同的键(在本例中为日期),并且它们代表的值对于每个映射都不同。我知道如何创建一个迭代器并迭代一个映射,然后使用该迭代器获取该映射的值。但是,我将如何遍历所有 3 个地图并将它们的值放入我需要的变量中?我很困惑,因为如果我使用一个迭代器来迭代所有 3 个映射,那么该迭代器只会给我创建迭代器的映射的值,而且我觉得为此创建 3 个 for 循环有点太多了。有什么想法吗?
multimap<Date, float> mapOption4WindSpeed;
multimap<Date, float> mapOption4Temperature;
multimap<Date, double> mapOption4Solar;
cout << "Please enter year (xxxx): " << endl;
cin >> year;
Date newDate;
newDate.SetDay("1");
newDate.SetDay("1");
newDate.SetDay(year);
for(int i = 0; i < SIZE; i++)
{
mapOption4WindSpeed.insert(make_pair(windlog[i].d, windlog[i].speed.GetSpeed()));
mapOption4WindSpeed.insert(make_pair(windlog[i].d, windlog[i].temp.GetTemperature()));
mapOption4Solar.insert(make_pair(windlog[i].d, windlog[i].solar.GetSolar()));
}
multimap<Date, float>::iterator itS = mapOption4WindSpeed.find(newDate);
multimap<Date, float>::iterator itT = mapOption4Temperature.find(newDate);
multimap<Date, double>::iterator itSol = mapOption4Solar.find(newDate);
for(int i = 0; i < SIZE; i++) //Loop through entire array to check if the input matches the year
{
if(itS != mapOption4WindSpeed.end()) //This statement and the above is where I am confused
{
//Bunch of operations in here
}
我的结构:
typedef struct
{
Date d;
Time t;
Weather speed;
Weather solar;
Weather temp;
} WindLogType;
然后我使用结构体的 Vector 来访问值:
Vector<WindLogType> windlog;
【问题讨论】:
-
我对你想要做什么感到有点困惑。您正在执行
.find以检查newDate是否在地图中。究竟是什么循环? -
我很抱歉,这只是我正在进行的工作,你可以假设我基本上被困在试图找出如何循环遍历 3 个地图而不是 1 个地图的值。我想这样做的原因, 是因为 3 个映射中的每一个都具有完全相同的键,因此大小也相同,但是它们保存的值不同,我想遍历映射并在同一个循环中从每个映射中检索值。希望这是有道理的
-
但我不确定你为什么需要一个循环。假设查找成功,
itS->second将为您提供风速。 -
我需要一个循环,因为我的文件中有重复的日期值(因此是多图),它们都有不同的对应值。通常,我通过为特定地图创建迭代器并在该地图上循环来循环,但现在,我无法创建单个迭代器来循环所有 3 个地图,因为该迭代器只会为我创建它的地图提供值。不会吗?