Мне было интересно, какой был бы оптимальный способ вычисления хэша, учитывая, что значения ptime
, которые используются в качестве ключа, отличаются в основном часами и дата (минуты и секунды обычно 0).Functor for std :: hash <boost :: posix_time :: ptime>
Я сделал это, но я чувствую, что это довольно некрасиво и медленно:
namespace std
{
/**
* Specialize std::hash for ptime
*/
template<>
class hash<boost::posix_time::ptime>
{
public:
size_t operator()(const boost::posix_time::ptime& t) const
{
const auto dt = t.date();
const auto ho = t.time_of_day().hours();
return hash<int>()(dt.day_number())^hash<int>()(ho);
}
};
}
Не total_nanoseconds() от time_duration -not ptime? поэтому его можно было бы получить только с time_of_day(), не так ли? – huff
Вы правы, я посмотрел на неправильный абзац в документации. Но у вас возникла идея: лучше расширить диапазон ввода хэша на миллисекунды или тики, чтобы результат был лучше распределен. –