我对STL还是很陌生,而对C ++来说却是相当陌生。我正在尝试获得等效的.NET Dictionary<string, value>(StringComparer.OrdinalIgnoreCase)
,但使用C ++。这大致就是我正在尝试的内容:
stdext::hash_map<LPCWSTR, SomeStruct> someMap;
someMap.insert(stdext::pair<LPCWSTR, SomeStruct>(L"a string", struct));
someMap.find(L"a string")
someMap.find(L"A STRING")
问题是,通常找不到任何查找操作(它返回someMap.end()
)。有时似乎可以正常工作,但大部分时间都无效。我猜想hash_map使用的哈希函数是对字符串的内存地址(而不是字符串本身的内容)进行哈希处理,并且几乎可以肯定,它不区分大小写。
我如何获得一个使用字典的结构,该结构使用不区分大小写的键并可以存储我的自定义结构?
您链接到的hash_map文档表示您可以提供自己的traits类作为第三个模板参数。这必须满足与hash_compare相同的接口。
这里提供了一些很好的信息。我从答案中收集了点点滴滴,并将其放在一起:
如果使用std::map
而不是非标准的hash_map
,则可以设置在执行二进制搜索时要使用的比较功能:
LPCWSTR是一个指向以NULL结尾的unicode字符数组的指针,在这种情况下可能不是您想要的。请使用wstring
的basic_string
专业化名称。