插入不从哈希函数中检索键

insert doesn't retrieve key from hash function

本文关键字:检索 函数 哈希 插入      更新时间:2023-10-16

我正在尝试使用键的哈希函数将结构存储到映射中。创建两个相同的对象时,我确实从哈希函数中获得了相同的键,但是每个元素仍然插入到映射中。

这是我的代码:

// Key
struct GridrecordKey {
    // Keys
    double key1;
    double key2;
    ...
    GridrecordKey() {
        key1 = 0;
        key2 = 0;
        ...
    }
    bool operator==(const GridrecordKey &other) const {
        return (key1 == other.key1
             && key2 == other.key2);
    }
};
// Hash function
struct GridrecordKeyHasher
{
    std::size_t operator()(const GridrecordKey& k) const
    {
        using boost::hash_value;
        using boost::hash_combine;
        // Start with a hash value of 0    .
        std::size_t seed = 0;
        hash_combine(seed, hash_value(k.key1));
        hash_combine(seed, hash_value(k.key2));
        // Return the result.
        return seed;
    }
};
// Record
struct gridrecord {
    double element1;
    double element2;
...
};

我的主程序示例:

 int main() {
        GridrecordKey key; // The key
        gridrecord record; // The record
        unordered_map<GridrecordKey, gridrecord, GridrecordKeyHasher> map;  // The map
        // Modify the key and insert record into map
        key.key1 = 1;
        map.insert({ key, record });
        // Keep the same key and try to insert another record into the map
        key.key1 = 1;
        // Here the record is added to the map while it should't as this 
        // key already exist
        auto x = map.insert({ key, record }); 
    }

提前感谢!

在您插入两次相同的元素后,我编译了您的代码并打印了地图中的元素计数:

std::cout << map.size() << std::endl;
--> 1

因此,您的代码正在按预期/想要的方式运行。

你怎么会认为它入了 2 次?

问题是由一个关键变量引起的。它的类型是 char[],比较函数无法正常工作。使用 strcmp(( 解决了这个问题。谢谢!