我应该使用哪种数据类型作为STL映射的键?

问题描述 投票:0回答:1

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

c++ object stl codeblocks
1个回答
0
投票

[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结构并提供“小于”运算符即可。

© www.soinside.com 2019 - 2024. All rights reserved.