2011-12-27 44 views
1

我是C++新手,我需要你的幫助。如何在C++中使用Cmap。將CString映射到UINT

我的目標是比較C++中的一些字符串並存儲相同的字符串。 要做到這一點。我將字符串散列爲UINT,然後檢查UINTS並存儲相同的UINTS。例如..我有2000文件的文本,他們每個人都有2行。使用散列映射,我將它們散列爲一堆UINTS。那麼我一起存儲相同的UINTS。最後,我想檢索相同的文件。所以,我使用Cmap。將UINTS映射到他們的文檔。我會做這個程序來提高記憶效率。

我使用這個代碼:

CString keyExample("This is a sample text"); 
LPCTSTR lpStr = (LPCTSTR)keyExample; 
CMapStringToOb hashObject; 
UINT keyExampleTemp=hashObject.HashKey(lpStr); 
cout<< keyExampleTemp<<endl; 

CMap<UINT, UINT, CString, CString*> mymap; 
CString value=mymap[keyExampleTemp]; 
cout<<value; 

如果我評論的最後3行,我會得到一個UINT爲「這是一個樣本文本」,但是,如果我去掉最後3行,我會得到這個錯誤,這意味着該問題是否與CMAP

錯誤C2664:'CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>::SetAt':無法從'CString'轉換參數2 'ATL::CStringT<BaseType,StringTraits> '

+1

如果你是新來的C++,然後請你幫個忙,並保持遠地從與MFC類似的古老C類文物。 – ildjarn

回答

4

CMap::operator []()用於設置元素,而不是檢索它們。改用Lookup()函數。

編輯:

假設我在下面瞭解您的意見,下面應該工作:

CString keyExample("This is a sample text"); 
LPCTSTR lpStr = (LPCTSTR)keyExample; 
CMapStringToOb hashObject; // just used for hash generation... 
UINT keyExampleTemp = hashObject.HashKey(lpstr); 

CMap<UINT, UINT &, CString, LPCTSTR> mymap; 
mymap[keyExampleTemp] = keyExample; // this stores the string in mymap using a key generated by the hash function above... 

CString keyRetrieved; 
mymap.Lookup(keyExampleTemp, keyRetrieved); // if this call returns 0, no element was found, otherwise keyRetrieved will contain "This is a sample text". 
+0

我使用名爲CMapStringToOb :: HashKey的哈希函數將「CString KeyExample」哈希爲「UINT KeyExampleHash」。然後我想用cmap檢索它。我如何在這裏使用查找?你能爲我寫信嗎?我在這些類中有點困惑! – Bipario

+1

你是說你想要在地圖中存儲'KeyExample'字符串,由'HashKey'生成的'KeyExampleHash'值引用嗎? – mwigdahl

+0

感謝您的回答。我有一個錯誤。該錯誤與最後一行中的「&KeyRetrieved」有關。它說「智能感知:對非const的引用的初始值必須是左值」 – Bipario

相關問題