在unordered_map中插入失败

时间:2015-03-15 01:41:24

标签: c++ unordered-map

我将无序地图定义为(在有序地图中):

std::map<xxx, std::unordered_map <Key, Data,Hasher, Equals>> umap_;

哈希函数基本上是fnv:

static inline size_t
hash (const void *data_ptr, int len)
{
    .....
    return hv % 0xffffffff;
}

插入操作如下:

std::pair<
            std::unordered_map<Key,Data,Hasher, Equals>::itr,
            bool> ret;

ret = umap_[xxx].insert(
            std::pair<Key, Data>(key, data));

我所看到的是,在某些情况下,即使生成的散列是唯一的,插入也会失败。当我检查返回迭代器时,它有一些键,它插入了一个完全不同的哈希值。

我在这里缺少什么?是否与正在生成的32位散列有关,并且它无法使用我的无序映射hs表

谢谢!

添加hasher和比较器

struct Hasher
{
    std::size_t operator()(const Key& k) const
    {
        return k->Hash();
    }
};

struct Equals {
    bool operator() (const Key& left, const Key& right) const
        { return !(left->Comp(*right)); }
};

Hash()是类中的虚函数:

    class <blah> : public <blah>    {
            protected:
                uint32_t                                 slotNum;
            public:
        .....
        .....
    virtual bool Comp(const Key& in) const
    {
        ...
        if (slotNum != in.slotNum) { return (slotNum < in.slotNum); }

        return (FALSE);
    }


    virtual size_t Hash() const
    {
        ....

        hash32 = hash(key_data_buffer, key_size);

        return hash32;
    }

0 个答案:

没有答案