如何迭代多重映射以满足 IF 条件 - C++

How to iterate over a multimap to satisfy an IF condition - C++

我有两个多图,一个带有日期和浮点数,另一个带有时间和浮点数。两个地图都有重复的值。在以日期为键的多图中,我对其进行迭代并存储用户输入的日期的 maximum 浮点值。然后,在我的下一张地图中,我想检索该值存在的日期的时间。 (我所有的数据都来自一个包含我需要的所有这些值的向量)。我的目标是打印出某个日期具有最大浮点值的时间,因此它可能是一次或多次。

目前,我的程序打印出所有包含该浮点值的时间,包括不属于用户输入日期的时间。我该如何修正我的逻辑,以便我只检索具有用户输入日期的时间以及最大值?

代码:

float maxVal = 0;
    for(std::multimap<Date, float>::iterator it = mapOption5Solar.begin(); it!=mapOption5Solar.end(); it++)
    {
        if(checkDate == it->first)
        {
            if(maxVal < it->second)
            {
                maxVal = it->second;
            }

        }
    }




    for(std::multimap<Time, float>::iterator it = mapOption5Time.begin(); it != mapOption5Time.end(); it++)
    {
        if(maxVal == it->second)
        {
            timeVec.add(it->first);
        }
    }

如果DateTime没有连接,那就没办法了。您无法将时间与特定日期匹配。

我建议创建一个结构,如下所示,并将您的数据存储在 multimap<DateTime, float>

struct DateTime {
    Date date;
    Time time;
};

之后可以写

float maxVal = 0;
for(const auto& [dateTime, value] : mapOption5)
{
    if(checkDate == dateTime)
    {
        if(maxVal < value)
        {
            maxVal = value;
        }
     }
}

for(const auto& [dateTime, value] : mapOption5)
{
    if((checkDate == dateTime) && (maxVal == value)
    {
        timeVec.add(value);
    }
}