c++ - 嵌套 map 将第二个键检测为重复

标签 c++ stdmap

我有以下代码,通过包含Date,Time和WindLogType的另一种数据类型的 vector 进行迭代

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;

    }
我的 map :
typedef map <Time,WindLogType> minuteIntervalData;
typedef map <Date,minuteIntervalData> DayData;
日期包含日期,例如。 2000/11/26
时间包含小时和分钟,例如。 11:23
WindLogType包含3个double类型的值
但是,当我尝试遍历 vector 以插入 map 时, map 会将时间检测为同一日期的重复项
例如:[26/11/2000] [11:23] [26/11/2000] [11:25]
映射将这两对键都标识为重复键,并且不会将值插入映射中。我已经为日期和时间类检查了重载的运算符“<”,但它们似乎还不错
日期:
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;
    }

}

最佳答案

对于两个比较运算符,都有一个没有return语句的执行路径。在第一种情况下,如果年份和月份相同,但日期大于您比较的日期,则将发生这种情况;对于第二种情况,我将由您自己决定。

关于c++ - 嵌套 map 将第二个键检测为重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64909835/

相关文章:

c++ - 如何有效地使用 valgrind

c++ - 如何在 C++ 中导出具有返回类型 std::map 的函数

c++ - 无法从指针访问映射成员

c++ - 如何摆脱 FormatMessageA 错误消息中附加的 ".\r\n"字符?

c++ - 是否可以定义一个包含函数和 lambda 的可调用概念?

c++ - 动态数组 C++ 的 Valgrind 内存泄漏

c++ - 如何在 std::map 中使用结构作为键

c++ - 显示 `std::map`

c++ - 为我将在 std::map 中使用的对象数组分配和释放内存的正确方法

c++ - 如何将特定的 Boost 库编译为 DLL