0

我有一个简单的结构:

struct data
{
  bool flag;
  std::size_t ix;
  std::size_t iy;
  std::size_t d;
};

我将这个结构的所有实例都保存在容器中,我需要尽可能快地搜索它。目前,我使用std::set基于字典比较的自定义比较函子。但是,我想尝试将我的数据存储在std::unordered_set.

我用于boost::hash_combine创建自定义哈希函子,但结果实际上比使用std::set. 我现在想将结构中的所有数据打包unsigned long long并使用标准std::hash函子。所以一个想法是有类似的东西:

struct hashed_data
{
  union
  {
    struct
    {
      bool flag;
      std::size_t ix;
      std::size_t iy;
      std::size_t d;
    } data;
    unsigned long long value_to_hash;
  };
};//hashed_data

问题是,我想确保我的结构确实适合unsigned long long类型。我可以在限制范围内更改我的数据成员的类型:

ix并且iy小于 100,000(它们可能不适合 16 位整数,但 24 位已经绰绰有余,但是,没有标准的 24 位整数?)。

d可以安全地属于一个char类型。

我将不胜感激对这个问题的任何看法——想法是否合理以及如何实现我的目标。

4

0 回答 0