如何在C ++中使用Cmap。将CString映射到UINT

时间:2011-12-27 22:31:19

标签: c++ mfc hash map

我是C ++的新手,我需要你的帮助。

我的目标是比较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':无法将参数2从'CString'转换为'ATL::CStringT<BaseType,StringTraits> '

1 个答案:

答案 0 :(得分: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".