【问题标题】:unordered_map with gregorian dates带有公历日期的 unordered_map
【发布时间】:2014-07-27 21:04:37
【问题描述】:

我想将boost::gregorian::date 存储为boost::unordered_map 的键,但我无法编译代码,因为它缺少该类的正确哈希函数。

  1. 一个简单的解决方案是转换为std::string 并存储它。我可能想避免这种解决方案,因为使用字符串非常昂贵。
  2. 我试图找到一些将日期导出为数字的函数,但我只能读取 day() 函数,我不确定这是否真的合适。
  3. 也许我可以计算我的日期和参考日期之间的天数?

还有其他更好的方法来存储日期或将日期导出为数字的函数吗?

【问题讨论】:

  • 为什么不将其存储在普通地图中?
  • 当然出于性能原因..map 是二叉树,unordered_map 访问为 O(1)
  • 您可以从提升日期获取朱利安日,并且有很多方法可以获取字符串表示形式。这是你要求的吗?
  • .mm 我要求将其转换为数字而不是字符串,因为使用字符串更昂贵
  • 这也是我提到朱利安日的原因

标签: c++ boost-date-time boost-unordered


【解决方案1】:

为其实现哈希函数:

namespace boost { namespace gregorian {

inline size_t hash_value(date const& date)
{
    return boost::hash_value(date.julian_day());
}

} } // boost::gregorian

julian_day 只是自儒略纪元开始以来的日期索引(无论是什么)。

【讨论】:

  • 有没有办法从 julian_day 构造 boost::gregorian::date ?我在 boost 参考中没有看到它。
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多