如何使用不区分大小写的Unicode字符串作为键的hash_map?

问题描述 投票:3回答:4

我对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使用的哈希函数是对字符串的内存地址(而不是字符串本身的内容)进行哈希处理,并且几乎可以肯定,它不区分大小写。

我如何获得一个使用字典的结构,该结构使用不区分大小写的键并可以存储我的自定义结构?

c++ stl hash dictionary
4个回答
3
投票

您链接到的hash_map文档表示您可以提供自己的traits类作为第三个模板参数。这必须满足与hash_compare相同的接口。


2
投票

这里提供了一些很好的信息。我从答案中收集了点点滴滴,并将其放在一起:


1
投票

如果使用std::map而不是非标准的hash_map,则可以设置在执行二进制搜索时要使用的比较功能:


0
投票

LPCWSTR是一个指向以NULL结尾的unicode字符数组的指针,在这种情况下可能不是您想要的。请使用wstringbasic_string专业化名称。

© www.soinside.com 2019 - 2024. All rights reserved.