Ваш вопрос тесно связан с unordered_map с григорианскими датами , за исключением того, что вы используете 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;
}