我想存储一个结构到一个映射使用哈希函数的关键。在创建两个相同的对象时,我从散列函数获得了相同的密钥,但每个元素仍然插入到映射中。插入不从哈希函数检索密钥
这里是我的代码:
// 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 });
}
提前感谢!
你是什么意思,每个元素仍然插入?该行应该执行,尽管有重复键 –
我的意思是,两个记录被添加到地图中,而应该只有一个,因为关键是相同的 – Batmax
为什么说这两个记录都被添加?在一些情况下,请参阅下面的答案 –