如何将gregorian_date存储为c ++中unordered_map的键?

时间:2018-05-14 05:10:57

标签: c++ boost unordered-map

如何使用将gregorian_date用作的unordered_map?

unordered_map<boost::gregorian::date,int>date_map;
boost::gregorian::date sample_date{2018,01,01};    
date_map[sample_date]=1;

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

您的问题与unordered_map with gregorian dates密切相关,除非您使用std::unordered_map代替boost::unordered_map。您需要解决同样的问题:如果您想在unordered_map中使用任何数据类型作为键,则需要为该类型提供std::hash的特化(在您的情况下为::boost::gregorian::date })。基于我链接的问题给出的答案,您可以使用此专业化:

#include <boost/date_time/gregorian/gregorian.hpp>
#include <unordered_map>

namespace std {

// Note: This is pretty much the only time you are allowed to
// declare anything inside namespace std!
template <>
struct hash<boost::gregorian::date>
{
  size_t operator () (const boost::gregorian::date& date) const
  {
    return std::hash<decltype(date.julian_day())>()(date.julian_day());
  }
};

}

int main()
{
  std::unordered_map<boost::gregorian::date, int> date_map;
  boost::gregorian::date sample_date{2018, 1, 1};
  date_map[sample_date] = 1;
}