【问题标题】:How to use Cmap in C++. mapping a CString to UINT如何在 C++ 中使用 Cmap。将 CString 映射到 UINT
【发布时间】:2012-01-28 19:34:05
【问题描述】:

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

我的目标是在 c++ 中比较一些字符串并存储相同的字符串。 去做这个。我将字符串散列到 UINT,然后我将检查 UINTS 并存储相同的 UINT。例如.. 我有 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&lt;KEY,ARG_KEY,VALUE,ARG_VALUE&gt;::SetAt':无法将参数 2 从 'CString' 转换为 'ATL::CStringT&lt;BaseType,StringTraits&gt; '

【问题讨论】:

  • 如果您是 C++ 新手,请帮自己一个忙,并尽可能远离 MFC 的古老 C-with-classes 遗物。
  • 请参阅这篇文章,了解如何定义使用CStringCMap 以及CMap 模板参数的含义。 stackoverflow.com/questions/32019236/… 建议使用 LPCTSTR 而不是 CString * 以及为什么带有支持文章的链接。

标签: c++ mfc hash map


【解决方案1】:

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".

【讨论】:

  • 我正在使用名为 CMapStringToOb::HashKey 的散列函数将“CString KeyExample”散列到“UINT KeyExampleHash”。然后我想用cmap检索它。我如何在这里使用查找?你能帮我写吗?我对这些课程有点困惑!
  • 您是说要将KeyExample 字符串存储在映射中,由HashKey 生成的KeyExampleHash 值引用?
  • 感谢您的回答。我有一个错误。该错误与最后一行中的“&KeyRetrieved”有关。它说“IntelliSense:对非常量的引用的初始值必须是左值”
  • 我总是对 CMap 在不同版本的 MFC 中如何与 CStrings 一起工作感到困惑。我已经编辑了代码块;再试一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多