如何使用哈希函数将unordered_map返回为仅期望"字符串,字符串>"的内容unordered_map<字符串



我想实现一个忽略键中大小写的unordered_map<string, string>。我的代码看起来像:

std::unordered_map<std::string, std::string> noCaseMap()
{
struct hasher {
std::size_t operator()(const std::string& key) const {
return std::hash<std::string>{}(toLower(key));
}
};
std::unordered_map<std::string, std::string, hasher> ret;
return ret;
}

但是XCode用以下错误标记返回语句:

foo.cpp:181:20 No viable conversion from returned value of type 'unordered_map<[2 * ...], hasher>' to function return type 'unordered_map<[2 * ...], (default) std::hash<std::string>>'

我尝试将ret转换为<std::unordered_map<std::string, std::string>>,但XCode没有。

我试着让我的hasher成为std::hash<std::string>的一个子类,但没有什么区别。


Edit:这是对问题的一个稍微过于简单化的描述;我知道我还必须实现一个不区分大小写的equal_to()函子。

你不能。这是有原因的:效率。你能做的就是把所有东西都小写。如果同时需要小写和保留大小写,则可能需要两个映射;但是,在这一点上,我会考虑请求更改接口。

相关内容

最新更新