如何使用将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;
任何人都可以帮助我。
答案 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;
}