如果散列函数返回一个尚未包含在地图中的值,我希望将值保存在std::map
中。该数据结构是:未在地图中输入条目(<key,values>)
std::map<uint8_t* , MyObject* , lex_compare> mymap;
uint8_t*
其中点C风格阵列128位(uint8_t hash_value[16]
)的含有施加到MyObject
类的字段的散列函数。我用lex_compare
用于个性化的比较:
struct lex_compare {
bool operator() (const uint8_t *hash1, const uint8_t *hash2) const {
/*for(int i=0 ; i<16 ; i++)
{
cout<<(unsigned int)hash1[i]<<" ";
}
cout<<endl<<endl;
for(int i=0 ; i<16 ; i++)
{
cout<<(unsigned int)hash2[i]<<" ";
}
int m=memcmp(hash2,hash1,16);
cout<<"m is è"<<m<<endl;*/
return (memcmp(hash2,hash1,16)<0); //compare 16 byte.
}
};
为了确保插入仅当散列值尚未包含在我使用地图:
while(mymap.size()<R)
{
myObject *temp_o = new myObject(parameters);
uint8_t hash_result = my_hash_function(myObject->return_field()) // return_field is a specific field of myObject
mymap.insert(make_pair(hash_result,temp_o));
}
但只有一个元件插入mymap
,从而我进入无尽的循环。为什么?我无法解释它。看看lex_compare
我看到这个函数总是返回零值(因为在2个等于元素上被调用)。可能是一个微不足道的问题,但我无法看到它。编辑: 我纠正比较功能的问题。但后来修正的主要问题仍然是
您的比较返回TRUE两个大于和小于。 – molbdnilo
你的hash_result是一个uint_8。你不显示实际的代码。我怀疑你的哈希函数返回一个指向本地数组的指针。 – 2017-07-30 18:12:40