如果散列函數返回一個尚未包含在地圖中的值,我希望將值保存在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