具有自定义类的unordered_map的效率

时间:2016-04-27 15:02:26

标签: c++ unordered-map

我使用带有动态内存分配的自定义类的unordered_map作为键和值。我想知道如何有效地插入键,特别是找到与特定键相关的值。 让

*facebook*

其中

typedef std::unordered_map<Key,Node> Hashtable;

和Key有一个定制的哈希函数

class Key {

public:

    int dimx;
    int *l;

    // allocate
    void allocate(int dim){
        l    = new int[dim];
        dimx = dim;
    }

    // ==
    bool operator==(const Key &other) const
    {
    int j;
    for(j = 0; j < dimx; j++){
        if(l[j] != other.l[j]){
            return 0;
        }
    }
    return 1;
    }

};

class Node {
public:

    double *x, *f;

    // allocate
    void allocate(int dim){
        x = new double[dim];
        f = new double[dim];
    }

};

然后我们可以通过

插入键和值
template <class T>
inline void hash_combine(std::size_t & seed, const T & v)
{

    std::hash<T> hasher;
    seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);

}

namespace std
{
  template <>
  struct hash<Key>
  {

    std::size_t operator()(const Key& key) const
    {
      std::size_t seed = 0;
      int j;
      for(j = 0; j < key.dimx; j++){
        hash_combine(seed,key.l[j]);
      }
      return seed;
    }
  };

}

根据密钥,我们可以通过以下方式找到一个节点:

int dim = 2
Hashtable *hashtable = new Hashtable;

Key *keya = new Key;
key->allocate(dim);
// set values of key

Node *nodea = new Node;
node->allocate(dim);
// set values of node

hashtable->insert(std::make_pair(*key,*node))

我已经分析了我的代码并得出结论,多次调用hashtable-&gt; find是最昂贵的部分。我可以更快地做点什么吗?应该是unorder_map,例如在指向类的指针方面?

0 个答案:

没有答案