首页 > 解决方案 > 嵌套映射将第二个键检测为重复

问题描述

我有以下代码迭代包含日期、时间和 WindLogType 的另一种数据类型的向量

for(unsigned int i = 0;i<holder.size();i++)
    {
        Date date = holder[i].GetDate();
        Time time = holder[i].GetTime();
        WindLogType wlt = holder[i].GetWindLogType();

        DD[date][time] = wlt;

    }

我的地图:

typedef map <Time,WindLogType> minuteIntervalData;
typedef map <Date,minuteIntervalData> DayData;

Date 包含日期,例如。26/11/2000 时间包含小时和分钟,例如。11:23 WindLogType 包含 3 个 double 类型的值

但是,当我尝试遍历向量以插入地图时,地图会检测到同一日期的重复时间

例如[26/11/2000][11:23] [26/11/2000][11:25]

这两个键对被映射标识为重复项,并且不会将值插入到映射中。我已经检查了 Date 和 Time 类的重载运算符“<”,但它们似乎没问题

日期 :

bool Date::operator < (const Date& D) const
{
    if (m_year < D.GetYear())
    {
        return true;
    }
    if (m_year > D.GetYear())
    {
        return false;
    }
    if (m_month < D.GetMonth())
    {
        return true;
    }
    if (m_month > D.GetMonth())
    {
        return false;
    }
    if (m_day < D.GetDay())
    {
        return true;
    }


}

时间 :

bool Time::operator < (const Time& T) const
{
    if (m_hours<T.GetHours())
    {
        return true;
    }
    if (m_hours>T.GetHours())
    {
        return false;
    }
    if (m_minutes<T.GetMinutes())
    {
        return true;
    }
    if (m_minutes>T.GetMinutes())
    {
        return false;
    }

}

标签: c++stdmap

解决方案


对于这两个比较运算符,都有一个没有返回语句的执行路径。在第一种情况下,如果年份和月份相同但日期大于您比较的日期,则会发生这种情况,对于第二种情况,我将留给您来确定情况。


推荐阅读