我認爲,到hash_table我不能添加相同的值。我的意思是插入(key1,value1),然後再插入它。這是添加到相同的密鑰hash_mapp字符串
但在我的情況下,它添加了相同的哈希相同的字符串。 我試圖保持BYTE *作爲一個鍵,但它仍然添加相同的字符串。
我已經使用HCRYPTHASH *,HCRYPTHASH,它仍然不正確。 也許它需要重寫的hash_map的方法(在C#中我取得了麻煩時,在字典關鍵是我自己的類,所以我只希望重寫的GetHashCode方法,並重新定義equals方法)
#include <hash_map>
#include <string>
#include <iostream>
#include <Windows.h>
#include <WinCrypt.h>
#pragma comment(lib,"crypt32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
std::hash_map<BYTE*,std::string> table1;
HCRYPTHASH hash1;
HCRYPTPROV prov1;
std::string a1="noname";
std::pair<BYTE*,std::string> pair1;
//insert first hash
::CryptAcquireContext(&prov1,NULL,NULL,PROV_RSA_AES,0);
::CryptCreateHash(prov1,CALG_MD4,0,0,&hash1);
BYTE* arr=(BYTE*)a1.c_str();
DWORD len0=strlen((char*)arr)+1;
::CryptHashData(hash1,arr,len0,0);
BYTE get[16];
DWORD len=16;
::CryptGetHashParam(hash1,HP_HASHVAL,get,&len,0);
pair1.first=get;
pair1.second=a1;
table1.insert(pair1);
/*----------------*/
HCRYPTHASH hash2;
HCRYPTPROV prov2;
std::string a2="noname";
std::pair<BYTE*,std::string> pair2;
//insert second hash
::CryptAcquireContext(&prov2,NULL,NULL,PROV_RSA_AES,0);
::CryptCreateHash(prov2,CALG_MD4,0,0,&hash2);
BYTE* arr1=(BYTE*)a2.c_str();
DWORD len1=strlen((char*)arr1)+1;
::CryptHashData(hash2,arr1,len1,0);
BYTE get1[16];
DWORD len11=16;
::CryptGetHashParam(hash2,HP_HASHVAL,get1,&len11,0);
pair2.first=get1;
pair2.second=a2;
table1.insert(pair2);
for each(std::pair<BYTE*,std::string> x in table1)
{
std::cout<<x.first<<" - - "<<x.second<<"\n";
}
::system("pause");
return 0;
}
檢查'insert'的**返回值**。 – 2012-01-08 14:13:00
它在兩種情況下返回1 – 2012-01-08 14:25:10