Как использовать Cmap в C ++. сопоставление CString с UINT - PullRequest
1 голос
/ 28 декабря 2011

Я новичок в 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 Ответ

4 голосов
/ 28 декабря 2011

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