【问题标题】:Which data type should I use as the key for STL map?我应该使用哪种数据类型作为 STL 映射的键?
【发布时间】:2020-03-27 09:12:57
【问题描述】:

我正在创建一个程序,它从 .csv 文件中读取一些记录并将其存储在地图中。我的密钥应该有两个属性,年和月。但在某些情况下,我被要求打印全年的数据,在这种情况下,我将无法输入月份(即月份=0)。那么在这种情况下哪种数据类型应该是最好的呢? 起初,我想到了整数,但如果要求我打印全年的详细信息,它就行不通了。我认为可能使用用户定义的类型对象会起作用,但是,我对迭代地图有点困惑。

【问题讨论】:

标签: c++ object stl codeblocks


【解决方案1】:

听起来您的 MonthYear 是两个独立的键,有时您正在寻找非唯一的结果(例如指定年份,未指定月份)。简单的解决方案是将您的记录存储在std::map<Year, std::map<Month, std::vector<Records> > my_data;那么

  • 要从特定的Year 获取记录,您可以遍历my_data[Year("2020")] 的结果
  • 从特定的Month(不管Year)获取记录,for (const auto& el: my_data) doSomething(el.second[Month("September")]); = 从特定的 YearMonth my_data[Year("2010")][Month("December")] 获取结果

从 C++20 开始,您可以使用标准 C++ 库中的 yearmonth;在此之前,您可以定义YearMonth 结构并提供“小于”运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多